1
0
Fork 0

Commits vergleichen

..

931 Commits

Autor SHA1 Nachricht Datum
5fe63ec70e
test 2023-10-03 20:36:04 +02:00
6bc33ebd64
test 2023-10-03 20:25:00 +02:00
df456abda0
test3 2023-10-03 20:09:53 +02:00
df30ce32ee
test2 2023-10-03 19:54:15 +02:00
4750829e1a
testing 2023-10-03 19:35:16 +02:00
49535d88bb
set default type to business 2023-10-03 18:44:50 +02:00
Angus McLeod
d5aa616ff8 DEV: Add explicit ordering to more specs 2023-09-30 09:46:25 +08:00
Angus McLeod
578c92e90e
Merge pull request #269 from paviliondev/composer-control-feature
Composer control feature
2023-09-21 10:43:24 +10:00
jumagura
3d104406fd REFACTOR: Improve test for category chooser when there is a create_topic_wizard customfield 2023-09-20 03:55:32 -04:00
jumagura
0eb6fb1ae0 REFACTOR: Move before_create_topic event handler to plugin.rb 2023-09-19 20:46:42 -04:00
jumagura
0992e9601c DEV: Make hide category default when custom wizard is selected 2023-09-19 14:17:06 -04:00
jumagura
10609f33e2 FIX: linting error 2023-09-19 14:00:04 -04:00
jumagura
bb81c5700a DEV: Use Discourse Events instead of topic model 2023-09-19 13:57:11 -04:00
jumagura
03ef41f7f0 FIX: Linting error 2023-09-18 18:11:20 -04:00
jumagura
bdd290f4e6 FIX: Linting error 2023-09-18 18:07:27 -04:00
jumagura
2ab15aaf86 FIX: linting error 2023-09-18 18:06:52 -04:00
jumagura
de9dccf233 bump version 2023-09-18 17:46:41 -04:00
jumagura
bb3f0c6252 DEV: Add acceptance tests for category filtering 2023-09-18 17:41:24 -04:00
jumagura
61309fd320 DEV: Add initializer logic to filter categories 2023-09-18 17:40:44 -04:00
jumagura
b365b5dd4f DEV: Add custom_field 2023-09-18 17:40:07 -04:00
jumagura
de03cbd15a DEV: Implement control to hide category from composer dropdown in specified categories 2023-09-18 17:39:50 -04:00
jumagura
29d7818a4a DEV: Add spec for validation 2023-09-18 17:36:21 -04:00
jumagura
f2d1437cff DEV: Implement wizard replacement validation in Topic Creation 2023-09-18 17:35:38 -04:00
Angus McLeod
9ab4ca21c8
Merge pull request #268 from paviliondev/fix_export_size
FIX: avoid page limit on downloads
2023-09-16 16:03:15 +10:00
merefield
16109b01e7 bump patch 2023-09-15 16:19:09 +01:00
merefield
43cd090b17 FIX: avoid page limit on downloads 2023-09-15 16:15:31 +01:00
Angus McLeod
5f99dc226a
Merge pull request #267 from paviliondev/resolve_deprecations
COMPATIBILITY:  resolve deprecations expected in Ember upgrade for Discourse 3.2
2023-09-15 16:55:45 +10:00
merefield
2460685e65 remove unintentional comment 2023-09-15 07:04:17 +01:00
merefield
c6fded7113 fix disabled behaviour of start time button 2023-09-14 21:08:20 +01:00
merefield
713c1bcaa5 fix test 2023-09-14 20:47:05 +01:00
merefield
ffa37e895c fix test and test spelling 2023-09-14 20:35:30 +01:00
merefield
22fac139b6 linting 2023-09-14 20:08:10 +01:00
merefield
61ea75dcad remove debugger statement 2023-09-14 20:03:02 +01:00
merefield
766d3b5fc9 fix erroneous route transitions 2023-09-14 20:02:02 +01:00
merefield
a786b5956b linting 2023-09-14 19:21:10 +01:00
merefield
794b7c9d5c add missing I18n imports 2023-09-14 19:19:20 +01:00
merefield
76c359be3b linting 2023-09-14 19:16:59 +01:00
merefield
6572b32706 move modals to glimmer components 2023-09-14 19:14:44 +01:00
merefield
d71d9976b8 bump patch 2023-09-14 15:05:54 +01:00
merefield
27596a1624 linting 2023-09-14 15:03:15 +01:00
merefield
3c17ef574e linting 2023-09-14 14:59:22 +01:00
merefield
742239b023 add router service to controllers to avoid deprecation 2023-09-14 14:58:34 +01:00
merefield
33a320021f linting 2023-09-14 14:47:52 +01:00
merefield
e6f44b7dfc resolve a batch of router deprecations 2023-09-14 14:42:12 +01:00
merefield
31f917ec80 fix replaceWith calling style deprecation 2023-09-14 14:34:18 +01:00
merefield
6c0d7a671e more this additions 2023-09-14 14:18:47 +01:00
merefield
31b2625a65 add this to avoid deprecation 2023-09-14 14:05:55 +01:00
Robert
bce0acbfd2
Merge pull request #263 from paviliondev/update-compatibility-main
DEV: Pin plugin for Discourse 3.1 stable
2023-09-08 16:31:17 +01:00
Robert
b81bc762c7
Merge branch 'main' into update-compatibility-main 2023-09-08 16:21:00 +01:00
jumagura
785bce228e bump version 2023-09-08 10:02:12 -04:00
Angus McLeod
52efc15576
Merge pull request #265 from paviliondev/temp_ignore_redirect
FEATURE: implement a way to temporarily ignore redirect
2023-09-08 09:53:12 +02:00
merefield
ebc0f706e3 remove redundant assignment 2023-09-08 07:18:31 +01:00
merefield
050a38a9d3 make code testable, add test 2023-09-08 07:13:52 +01:00
merefield
8649ab2286 bump patch 2023-09-06 16:27:40 +01:00
merefield
037132fb1a prettier 2023-09-06 16:26:30 +01:00
merefield
8332818616 FEATURE: implement way to temporarily ignore redirect 2023-09-06 13:29:21 +01:00
jumagura
36d6f9bc6f bump version 2023-09-05 12:52:11 -04:00
jumagura
121d60330a DEV: Pin plugin for Discourse 3.1 stable 2023-09-05 12:49:58 -04:00
jumagura
13a1538eb9 DEV: Update compatibility for main branch 2023-09-05 12:38:25 -04:00
Angus McLeod
fee56c2d43
Merge pull request #261 from paviliondev/fix_submissions_data_export_content
SECURITY: remove sensitive user content from submissions export
2023-08-23 17:50:10 +02:00
merefield
da4fe79aea bump patch 2023-08-23 14:35:58 +01:00
merefield
0a450d58f4 SECURITY: remove sensitive user content from submissions export 2023-08-23 14:33:56 +01:00
Robert
b45e01803d
Merge pull request #260 from paviliondev/fix-hyperlink-modal-deprecation
COMPATIBILITY: Update insert-hyperlink invocation following core change
2023-08-15 07:52:08 +01:00
jumagura
b8cfaa7f23 bump version 2023-08-14 18:19:14 -04:00
jumagura
690f12ee3e COMPATIBILITY: Update insert-hyperlink invocation following core change 2023-08-14 18:17:57 -04:00
Angus McLeod
1f35b80f85
Merge pull request #247 from paviliondev/subscription_client_gem_update
Update subscription client class to support gem version of Subscription Client
2023-07-27 13:30:02 +02:00
merefield
72b1a2aca5 merge in main 2023-07-27 09:52:19 +01:00
Angus McLeod
f5129b7ffe
Merge pull request #257 from paviliondev/remove_category_custom_field_on_wizard_delete
FIX: Remove category custom field on wizard delete (Take Two)
2023-07-19 12:27:33 +01:00
merefield
a342626267 stick to one method for text conversion 2023-07-19 11:14:08 +01:00
merefield
3fe1a7c7e8 remove redundant downcasing 2023-07-19 09:23:48 +01:00
merefield
609df33680 downcase name for category cstm setting 2023-07-18 14:29:39 +01:00
merefield
ec739d0450 bump patch 2023-07-18 14:06:16 +01:00
merefield
c26a89a78a fix test 2023-07-18 14:05:09 +01:00
merefield
ec88af0cc0 FIX: also delete Category Cust Fld for wizrds with names of mult words 2023-07-18 13:53:09 +01:00
Angus McLeod
10d597c495
Merge pull request #256 from paviliondev/fix_timer_default_on_new_wizard
FIX: direct after start time default for new wizard
2023-07-17 12:01:49 +01:00
merefield
cc2eb8c742 linting 2023-07-17 10:55:44 +01:00
merefield
98fe9ce77f bump patch 2023-07-17 10:36:07 +01:00
merefield
55a4797e4f Merge branch 'main' into fix_timer_default_on_new_wizard 2023-07-17 10:35:37 +01:00
Angus McLeod
33da03b63a
Merge pull request #255 from paviliondev/remove_category_custom_field_on_wizard_delete
FIX: ensure related create topic wizard setting is removed when wizard is deleted
2023-07-17 10:32:58 +01:00
merefield
580889a34e move destroy logic into library method & transaction 2023-07-17 10:16:27 +01:00
merefield
8d32aebf05 FIX: direct after start time default for new wizard 2023-07-16 11:33:09 +01:00
merefield
b71f627d73 improve test explanation 2023-07-15 10:00:54 +01:00
merefield
1b93c06188 bump patch 2023-07-15 09:57:54 +01:00
merefield
4449ab7aff Add corresponding code to help pass test 2023-07-15 09:56:32 +01:00
merefield
1662ff166d Add failing test 2023-07-15 09:38:46 +01:00
Angus McLeod
270d7926cc
Merge pull request #253 from paviliondev/dont_rely_on_application_route_override
IMPROVE: Move pending wizard check to page change event
2023-07-14 08:19:45 +02:00
merefield
a13f7be6a3 revert remove redundant line as not redundant 2023-07-13 16:07:36 +01:00
merefield
f94df66613 move current user determination to api & remove redundant line 2023-07-13 16:04:31 +01:00
Robert Barrow
5aefa9c544 restore after directive 2023-07-12 12:53:20 +01:00
Robert Barrow
7861e37224 restore original redirect file 2023-07-12 11:04:59 +01:00
Robert Barrow
6a9f93bccb Add back message bus subscription 2023-07-11 19:49:19 +01:00
Robert Barrow
bf2dcdba86 linting 2023-07-11 17:58:10 +01:00
Robert Barrow
6beccd95f0 linting 2023-07-11 17:55:19 +01:00
Robert Barrow
603886b394 add test 2023-07-11 17:49:08 +01:00
Robert Barrow
7fd4d9bd24 revert unintended changes 2023-07-11 14:32:04 +01:00
merefield
0cec743253 fix for anon 2023-07-11 08:48:20 +01:00
merefield
ccb7095b00 bump patch 2023-07-11 08:24:36 +01:00
merefield
3189c03fbe Merge branch 'main' into dont_rely_on_application_route_override 2023-07-11 08:22:31 +01:00
Angus McLeod
c4521b4b92
Merge pull request #254 from paviliondev/linting_update
COMPATIBILITY: Linting update
2023-07-11 09:06:55 +02:00
merefield
00a66cd1f9 fix failing tests 2023-07-10 21:31:47 +01:00
merefield
c495540157 revert reversion of fix 2023-07-10 15:18:55 +01:00
merefield
b8965de717 revert prior selector change 2023-07-10 15:08:29 +01:00
merefield
6f4e7015f8 linting 2023-07-10 09:35:59 +01:00
merefield
90046f5fe3 simplify selector 2023-07-10 09:33:48 +01:00
merefield
ba20a8a195 prettier 2023-07-10 07:55:54 +01:00
merefield
1f928f0f81 more ES linting 2023-07-10 07:52:32 +01:00
merefield
c67d5075cb ES Linting 2023-07-10 07:46:43 +01:00
merefield
2737210baf import bootbox 2023-07-10 07:32:05 +01:00
merefield
b73cb95e46 bump patch 2023-07-10 07:28:08 +01:00
merefield
a575ffdf76 update yarn.lock 2023-07-10 07:25:42 +01:00
merefield
e51ba49e11 update package.json 2023-07-10 07:23:59 +01:00
merefield
2df920895d FE linting 2023-07-10 07:03:45 +01:00
merefield
39b947d003 bump patch 2023-07-10 06:58:52 +01:00
merefield
10df3208df IMPROVE: Move pending wizard check to page change event 2023-07-07 17:16:51 +01:00
Angus McLeod
d74f5cbd89
Merge pull request #252 from paviliondev/temp_app_route_fix
FIX: temp fix for javascript exception during init
2023-07-07 12:20:37 +02:00
merefield
eadd64bbbc FIX: temp fix for javascript exception during init 2023-07-07 11:11:00 +01:00
merefield
c85be78af5 merge in latest main 2023-07-05 19:59:11 +01:00
Angus McLeod
ebd25f2780
Merge pull request #250 from paviliondev/add_product_slug_env_variable
Add product slug env variable
2023-06-29 11:13:02 +02:00
Angus McLeod
af39c567ea Add product slug env variable 2023-06-29 10:26:39 +02:00
Angus McLeod
cd6503d425 Remove fragile tests 2023-06-28 09:22:07 +02:00
Angus McLeod
6e0f10ca0d
Merge pull request #248 from paviliondev/add-logs
Add memoization to reduce redis calls
2023-06-22 06:34:07 +02:00
Angus McLeod
f8ea421852 Bump version 2023-06-22 06:25:05 +02:00
Angus McLeod
f08f9f303f Bump version 2023-06-22 06:23:41 +02:00
Angus McLeod
b4d23970bc
Merge branch 'main' into add-logs 2023-06-22 06:20:02 +02:00
Angus McLeod
7561bc8042
Merge pull request #249 from paviliondev/fix_reset_behaviour
FIX: upon revisit, start at step 1 if reset on revisit is set
2023-06-21 11:06:42 +02:00
merefield
d9ace0449f Bump patch 2023-06-21 09:56:46 +01:00
merefield
712c15e845 FIX: upon revisit, start at step 1 if reset on revisit is set 2023-06-21 09:53:42 +01:00
jumagura
a5179e568b bump version 2023-06-21 00:44:39 -04:00
jumagura
9e65fcb410 Merge branch 'main' into add-logs 2023-06-21 00:43:38 -04:00
jumagura
29141ab35c DEV: Change instance name to a more specific name 2023-06-21 00:41:45 -04:00
jumagura
a5ebc282cf DEV: Implement instance-level caching for custom fields 2023-06-21 00:33:01 -04:00
Angus McLeod
0602e59d70 DEV: frontend tests cleanup
- Fix failing test
- Handle deprecations
- Fix typos
2023-06-20 09:10:53 +02:00
jumagura
78e7ae4e04 DEV: Undo formatting change 2023-06-19 16:54:23 -04:00
jumagura
c8a19e8c85 bump version 2023-06-19 16:53:34 -04:00
jumagura
298c083624 DEV: Add memoization to reduce redis calls 2023-06-19 16:52:20 -04:00
Robert
92b8fdc6d9
Bump patch 2023-06-13 19:23:54 +01:00
Angus McLeod
61bf199934 Update class in tests 2023-06-13 20:02:20 +02:00
Angus McLeod
86e6945ad4 Update subscription client class 2023-06-13 19:35:12 +02:00
Angus McLeod
e7ab0f7143
Merge pull request #214 from paviliondev/admin-acceptance-tests
Admin acceptance tests
2023-06-13 16:43:49 +02:00
jumagura
519e868078 bump version 2023-06-06 15:24:32 -04:00
jumagura
c1f06c6fff Merge branch 'main' into admin-acceptance-tests 2023-06-06 15:23:30 -04:00
Angus McLeod
42d6e094a2 Fix failing spec
See further 6cf863080a
2023-06-06 09:15:16 +02:00
Angus McLeod
2fe8501c65 Fix failing specs 2023-06-02 12:51:28 +02:00
Angus McLeod
c256a41668 Also ensure subscription client definition is in the right state 2023-05-31 14:27:00 +02:00
Angus McLeod
99e747a331 Ensure subscriptions are not stubbed if testing for no subscription 2023-05-31 12:09:00 +02:00
jumagura
2cb876ac69 Merge branch 'main' into admin-acceptance-tests 2023-05-26 00:53:58 -04:00
jumagura
acbaebf0aa DEV: Add test for reading wizard content 2023-05-26 00:41:35 -04:00
jumagura
97db657227 DEV: Add test for wizard set and if in actions section 2023-05-26 00:39:27 -04:00
jumagura
c1ee353470 DEV: Add another wizard to test reading a wizard content 2023-05-26 00:35:01 -04:00
Angus McLeod
4bfea70dde Linting fix 2023-05-23 10:27:42 +02:00
Angus McLeod
12ca60775a Bump version 2023-05-23 10:11:43 +02:00
Angus McLeod
4cdfdbf9d5 FIX: ensure element is present before passing on insertText event 2023-05-23 10:10:52 +02:00
Robert
6dbd8f7c4f
Merge pull request #246 from paviliondev/multiple_subscriptions_fix
Fix multiple subscriptions sort
2023-05-19 09:38:02 +01:00
Angus McLeod
49c1848e88 Bump version 2023-05-19 10:30:58 +02:00
Angus McLeod
00ba8425e3 Fix multiple subscriptions sort 2023-05-19 10:29:54 +02:00
Robert
705c84dd02
Merge pull request #221 from paviliondev/subscription_client_update
Complete updates to handle subscription product slugs
2023-05-19 07:47:08 +01:00
Angus McLeod
dc23db7a0c Bump version 2023-05-18 18:45:40 +02:00
Angus McLeod
929edc5d0e
Merge branch 'main' into subscription_client_update 2023-05-18 18:44:08 +02:00
jumagura
594a226576 DEV: Add testing for Step text editor 2023-05-16 01:25:59 -04:00
jumagura
b965afa020 DEV: Fix linting error 2023-05-11 06:33:28 -04:00
jumagura
92461ad9d3 DEV: Add aditional second waiting to avoid global failure 2023-05-11 06:23:35 -04:00
jumagura
a4a18115ee DEV: Change message content condition 2023-05-11 05:57:06 -04:00
jumagura
dd8b4b8e99 DEV: Add waiting the icon to change to default 2023-05-11 05:32:33 -04:00
jumagura
537ffeb883 DEV: Add waiting for inserted element to disappear 2023-05-11 04:57:36 -04:00
jumagura
69dc96562d DEV: Add waiting for the default message 2023-05-11 04:19:05 -04:00
jumagura
c83e514de9 DEV: Add admin manager destroy test 2023-05-11 04:00:46 -04:00
jumagura
887057d0d2 DEV: Add download submissions test 2023-05-11 02:34:23 -04:00
jumagura
64b1c0264e DEV: bump version 2023-05-11 01:48:53 -04:00
jumagura
02a3c426c0 Merge branch 'main' into admin-acceptance-tests 2023-05-11 01:47:58 -04:00
jumagura
9793ef6453 DEV: Add admin submissions modal action tests 2023-05-11 01:44:23 -04:00
jumagura
ed37c13664 DEV: Change title for admin api testing 2023-05-11 01:43:11 -04:00
Angus McLeod
e46d681379
Update README.md
Update issue and documentation links in readme.
2023-05-10 12:20:53 +02:00
Angus McLeod
2103c4d67e
Merge pull request #242 from paviliondev/field_type_subscription_ui
Add wizard-subscription-selector support to field type selection
2023-05-10 11:55:23 +02:00
jumagura
e4b9be9393 DEV: Add update, delete acceptance tests 2023-05-09 10:20:04 -04:00
jumagura
1a84acec21 DEV: Add created and read custom fields tests 2023-05-09 03:17:22 -04:00
jumagura
d0459575e0 DEV: Test available serializer fields for each class 2023-05-09 01:21:47 -04:00
jumagura
0c08b5c044 DEV: Add test for enabled and disabled custom field for unsuscribed plan 2023-05-09 01:19:46 -04:00
jumagura
b3266c6d18 DEV: Add custom fields unsuscribed test 2023-05-09 01:15:21 -04:00
Angus McLeod
7c56b6d4d7
Merge branch 'main' into field_type_subscription_ui 2023-05-08 18:42:14 +02:00
jumagura
af064dc655 DEV: Keep plugin.rb format 2023-05-05 20:43:16 -04:00
jumagura
9ff9844420 Merge branch 'main' into admin-acceptance-tests 2023-05-05 20:38:59 -04:00
jumagura
63d975eba0 DEV: Add admin custom fields acceptance tests 2023-05-05 20:37:58 -04:00
Angus McLeod
6be5511d18
Merge branch 'main' into subscription_client_update 2023-05-04 17:27:07 +02:00
Angus McLeod
44f078caff Fix failing rspec test 2023-05-04 17:25:10 +02:00
Angus McLeod
42517c094e Minor tweaks to subscription loading logic 2023-05-04 17:16:11 +02:00
Angus McLeod
99f2e8bbd9 Rubocop 2023-05-04 15:49:22 +02:00
Angus McLeod
3ea19e1086 Add support for server products PR in isolation 2023-05-04 15:49:04 +02:00
Angus McLeod
92fe9db1e0 Change subscription_url back 2023-05-04 15:18:34 +02:00
Angus McLeod
4c784d98e6 Add not equals support to mapper 2023-05-03 11:01:54 +02:00
Angus McLeod
461e617453
Merge pull request #245 from paviliondev/log_spec_fix 2023-05-02 08:51:27 +02:00
merefield
8b443e0f08 bump patch 2023-05-01 21:52:10 +01:00
merefield
caab850127 FIX: failing log spec 2023-05-01 21:49:44 +01:00
Angus McLeod
32a8dcf19f Add cron schedule to Custom Wizard workflow 2023-04-28 16:15:48 +02:00
jumagura
06c812a720 FIX: Change input value in API endpoint 2023-04-17 12:23:45 -04:00
jumagura
15cc33b8cc DEV: Update admin acceptance test custom-fields, logs, submissions 2023-04-17 12:01:54 -04:00
jumagura
54ad75bafd Merge branch 'main' into admin-acceptance-tests 2023-04-17 11:56:31 -04:00
Robert
cff6796d7c
Change server meta URL temporarily for test scenario 2023-04-17 16:55:15 +01:00
jumagura
fcb6b2a359 DEV: Update standard subscription acceptance test 2023-04-17 11:53:45 -04:00
jumagura
51624ac819 DEV: Update unsubscribed acceptance test 2023-04-17 11:16:13 -04:00
Angus McLeod
2f6492c2ed
Merge pull request #243 from paviliondev/group_user_population_fix 2023-04-11 17:43:57 +08:00
merefield
93b574beb7 fix spelling 2023-04-11 10:00:42 +01:00
merefield
f7cdc77a06 fix spelling 2023-04-11 09:59:22 +01:00
merefield
37cef2ccc2 IMPROVE: warn in logs when at least one user in wizard did not exist 2023-04-11 09:54:37 +01:00
merefield
766cae92ba bump patch 2023-04-06 17:05:06 +01:00
merefield
6b2dd5a443 FIX: users not being added to group as part of create action 2023-04-06 17:04:01 +01:00
Angus McLeod
3d65ad032d Merge branch 'main' into field_type_subscription_ui 2023-04-03 15:08:16 +10:00
Angus McLeod
2423e9afb7 Bump version 2023-04-03 15:08:02 +10:00
Angus McLeod
4c8fd63d6f Bump version 2023-04-03 15:07:44 +10:00
Angus McLeod
f29f300a6f FIX: ensure scrollTop on step route transition 2023-04-03 15:07:25 +10:00
Angus McLeod
b035ab9168 Bump version 2023-04-03 12:39:14 +10:00
Angus McLeod
80405555b0 Merge branch 'main' into field_type_subscription_ui 2023-04-03 12:38:49 +10:00
Angus McLeod
454ed607b4
Merge pull request #241 from paviliondev/handle_admin_template_deprecations
Handle admin template deprecations
2023-04-03 10:38:29 +08:00
Angus McLeod
2114b80185 Add wizard-subscription-selector support to field type selection 2023-04-03 12:37:09 +10:00
Angus McLeod
81372b4d3b Update version 2023-04-03 12:29:45 +10:00
Angus McLeod
61ec6123d7 Handle admin template deprecations 2023-04-03 12:28:06 +10:00
Angus McLeod
4ceffb7d0f FIX: Apply char-counter fix to composer as well 2023-04-03 11:04:28 +10:00
jumagura
0f59c9092f Merge branch 'main' into admin-acceptance-tests 2023-03-30 21:22:44 -04:00
jumagura
0b70806b6b bump version 2023-03-30 21:20:18 -04:00
Angus McLeod
1705a2728f
Merge pull request #240 from paviliondev/field_focus_fix
FIX: autofocus is causing issues on long steps
2023-03-30 15:11:19 +08:00
Angus McLeod
6429bff31a
Merge branch 'main' into field_focus_fix 2023-03-30 12:23:31 +08:00
Angus McLeod
2d8b830962 Bump version 2023-03-30 12:22:20 +08:00
Angus McLeod
889caf3fa5 Bump version 2023-03-30 12:21:23 +08:00
Angus McLeod
d3e4b16610
Merge pull request #239 from paviliondev/character_counter_fix
COMPATIBILITY: Character counter is now a core component
2023-03-30 12:20:00 +08:00
Angus McLeod
5da7030c76 FIX: autofocus is causing issues on long steps 2023-03-30 12:19:00 +08:00
Angus McLeod
fa3e2d0c55 Update wizard-char-counter.js.es6 2023-03-30 12:09:00 +08:00
Angus McLeod
c4e2f2a4a8 Update plugin.rb 2023-03-30 12:02:20 +08:00
Angus McLeod
6bcc24eabc Namespace char-counter helper 2023-03-30 12:02:01 +08:00
Marcos
3fe42c4183
Merge pull request #237 from paviliondev/frontend_updates
Fix deprecations && invalid field handling
2023-03-29 08:32:54 -05:00
Marcos
af62ebb547
bump version 2023-03-29 09:13:28 -04:00
Marcos
978aaf89b0
Merge branch 'main' into frontend_updates 2023-03-29 08:10:51 -05:00
Marcos
82aae6d34a
Merge pull request #238 from paviliondev/incorrect_step_when_steps_are_added
Fix start step when step is added to previously used wizard
2023-03-22 11:51:36 -05:00
Angus McLeod
5ab4147a40 Template linting 2023-03-22 11:39:04 +01:00
Angus McLeod
3f0e1b21f0 Prettier fixes 2023-03-22 11:38:18 +01:00
Angus McLeod
e7e9c0e8f8 Bump version 2023-03-22 11:22:01 +01:00
Angus McLeod
8734cda00b Fix start step when step is added to previously used wizard 2023-03-22 11:20:30 +01:00
Angus McLeod
095cfe1eb6 Bump version 2023-03-22 10:12:19 +01:00
Angus McLeod
392b6f3d58 Fix deprecations && invalid field handling 2023-03-22 10:11:48 +01:00
Angus McLeod
e2797ced64 Bump version 2023-03-21 17:41:49 +01:00
Angus McLeod
8fdd21601b Strings are Objects in ruby 2023-03-21 17:41:05 +01:00
Richard Odekerken
759358e081
Merge pull request #236 from paviliondev/liquid_template_error_handling
Ensure we're not interpolating an object
2023-03-21 17:34:32 +01:00
Angus McLeod
076e1f4966 Bump version 2023-03-21 17:22:15 +01:00
Angus McLeod
a146d57f0e Ensure we're not interpolating an object 2023-03-21 17:20:58 +01:00
Angus McLeod
78f5af87e1
Merge pull request #235 from paviliondev/category_name_output_text_selection
Add output text selection to category name
2023-03-21 15:47:51 +01:00
Angus McLeod
83d3ca8eb3 Add output text selection to category name 2023-03-21 15:34:07 +01:00
jumagura
014219c038 DEV: Use helpers for api creation 2023-03-21 04:56:48 -04:00
jumagura
1254fcfb4e DEV: Add helper for wizard api 2023-03-21 04:48:46 -04:00
jumagura
2c52459f29 DEV: Update api creatipon wizard 2023-03-21 04:48:24 -04:00
jumagura
ebddcb5606 FIX: Update creation of wizard on business tier 2023-03-21 04:47:58 -04:00
jumagura
60d50afc54 FIX: Display no data when no API is selected 2023-03-21 02:19:03 -04:00
jumagura
99c2c2a461 FIX: Display empty API content when no data is selected 2023-03-21 00:53:49 -04:00
jumagura
0a5b7411aa bump version 2023-03-20 17:52:01 -04:00
jumagura
c6c4e31ba9 merge main 2023-03-20 17:50:27 -04:00
Angus McLeod
c6dc80f02c FIX: template guest validation not working with validation conditions 2023-03-17 09:05:53 +01:00
Robert
7d6456667a
Merge pull request #234 from paviliondev/fix_user_in_submissions_two
Ensure each submission wizard has the right user
2023-03-16 17:06:46 +00:00
Angus McLeod
33abececd4 Bump version 2023-03-16 17:44:24 +01:00
Angus McLeod
ef1a8d1457 Ensure each wizard has the right user 2023-03-16 17:44:10 +01:00
Robert
5eca78f172
Merge pull request #229 from paviliondev/fix_user_in_submissions
Ensure submission users are serialized properly
2023-03-16 11:37:11 +00:00
Robert
936efe5aff
Merge branch 'main' into fix_user_in_submissions 2023-03-16 11:28:47 +00:00
jumagura
0e5f0fc86d DEV:Bump version 2023-03-15 21:52:44 -04:00
jumagura
c375c1dcd9 DEV: Merge main 2023-03-15 21:43:32 -04:00
jumagura
9b8a3589bd merge main 2023-03-15 21:43:03 -04:00
Angus McLeod
345885bdbd
Merge pull request #231 from paviliondev/update_workflows
Move to standard plugin workflow
2023-03-15 14:13:37 +01:00
Angus McLeod
e6d7f3d9bc Update plugin.rb 2023-03-15 14:07:25 +01:00
Angus McLeod
59f00d6278 Move to standard plugin workflow 2023-03-15 14:06:55 +01:00
Richard Odekerken
c475ec65cd
Merge pull request #228 from paviliondev/composer_copy_paste
Move to new Uppy handling in discourse/discourse
2023-03-15 14:04:03 +01:00
Angus McLeod
a4e49e7bbc Ensure submission users are serialized properly 2023-03-15 13:33:07 +01:00
Angus McLeod
c0ed596ff9
Merge branch 'main' into composer_copy_paste 2023-03-15 10:48:18 +01:00
Angus McLeod
20e7b492ea FIX: use const instead of let for observedCache 2023-03-15 10:44:56 +01:00
Angus McLeod
52fe5166cd Fix linting 2023-03-15 10:38:26 +01:00
Angus McLeod
24ce4da6f2 Make linters happy 2023-03-15 10:30:24 +01:00
Angus McLeod
e489845daf Bump version 2023-03-15 10:28:51 +01:00
Angus McLeod
6a4063951e Move to new Uppy handling in discourse/discourse 2023-03-15 10:26:46 +01:00
Angus McLeod
0e70a5a221 FIX: add observed cache to undo changes mixin
Prevents observer add / remove race conditions which can cause exceptions.
2023-03-15 09:22:09 +01:00
Angus McLeod
030929a414
Merge pull request #227 from paviliondev/remove_in_wizard_subscription_conditional_logic_check
Remove subscription requirement for template field interpolation
2023-03-14 16:47:45 +01:00
Angus McLeod
3a5430c767 Bump version 2023-03-14 16:35:23 +01:00
Angus McLeod
091362cb00 Remove subscription requirement for field interpolation. 2023-03-14 16:34:58 +01:00
Robert
631b5fe44c
Merge pull request #225 from paviliondev/fix-composer-hyperlink
FIX: Use discourse hyperlink modal in composer instead of custom
2023-03-10 14:59:47 +00:00
Angus McLeod
c2c86b12c2
Merge pull request #226 from paviliondev/guest_permissions_user_access_fix 2023-03-10 15:49:31 +01:00
merefield
b73437299c IMPROVE: separate out new tests 2023-03-10 14:42:42 +00:00
jumagura
a84bf52542 DEV: Add front-end test for hyperlink modal in composer 2023-03-10 10:39:40 -04:00
merefield
148e188490 merge main and bump patch 2023-03-10 12:53:01 +00:00
merefield
a3b665434c Bump patch 2023-03-10 12:50:37 +00:00
merefield
9e59b73ebe Bump patch 2023-03-10 12:49:32 +00:00
merefield
092947f68b FIX: regular users can't access wizard with guest permissions 2023-03-10 12:43:37 +00:00
jumagura
320196b1f0 FIX: Use discourse hyperlink modal in composer instead of custom 2023-03-09 22:34:40 -04:00
Angus McLeod
e422867729 Merge branch 'main' into subscription_client_update 2023-03-09 09:07:59 +01:00
Angus McLeod
9bb01d29ab Fix prettier issue and bump version 2023-03-08 11:10:46 +01:00
Angus McLeod
0fc2c6b850 FIX: Ensure tag_groups is in wizard schema 2023-03-08 09:26:57 +01:00
Angus McLeod
762ddfa16e FIX: Ensure tag_groups is in wizard schema 2023-03-06 10:00:52 +01:00
Angus McLeod
ebea3e666a FIX: Client-side exception fixes 2023-03-02 10:36:06 +01:00
Angus McLeod
71277f8448
Merge branch 'main' into subscription_client_update 2023-02-27 09:27:27 +01:00
Angus McLeod
3e25f43ba0
Merge pull request #222 from xfalcox/main
FIX: (File|Dir).exists? is deprecated
2023-02-24 17:55:39 +01:00
Angus McLeod
7068dfd727 Bump version 2023-02-24 17:35:07 +01:00
Rafael dos Santos Silva
ce914c3f57
FIX: (File|Dir).exists? is deprecated 2023-02-24 12:13:51 -03:00
Angus McLeod
aef9ed24ae Change problematic Dir.exists? 2023-02-24 14:27:08 +01:00
Angus McLeod
da6e75faca Fix admin index 2023-02-24 14:17:00 +01:00
Angus McLeod
bc81ca89aa Update workflow 2023-02-23 21:23:38 +01:00
Angus McLeod
dfc23978ae Bump version 2023-02-23 19:25:52 +01:00
Angus McLeod
9eb5fc6ff6 Complete updates to handle subscription product slugs 2023-02-23 19:24:11 +01:00
Richard Odekerken
643c5ecff0
Merge pull request #219 from paviliondev/tag_group_restriction_fix
Tag group restriction fix
2023-02-10 18:13:22 +01:00
Richard Odekerken
75d429388e
Merge branch 'main' into tag_group_restriction_fix 2023-02-10 18:13:03 +01:00
Robert
f5d265846d
Merge pull request #216 from paviliondev/add_guest_support
Add guest support
2023-02-10 13:51:21 +00:00
Angus McLeod
e5d6a20532 Fix specs 2023-02-09 14:32:01 +01:00
Angus McLeod
e7ee89048a Guest wizards cannot use composer or upload 2023-02-09 14:18:25 +01:00
Angus McLeod
b2b93aad59 Ensure admin can access wizard multiple times 2023-02-09 13:10:55 +01:00
Angus McLeod
7c8f530c86 Update wizard.rb 2023-02-09 12:33:55 +01:00
Angus McLeod
75e262a526 Merge branch 'main' into add_guest_support 2023-02-08 14:00:51 +01:00
Robert
1e6a5c39b1
Merge pull request #220 from paviliondev/css_fix
FIX: compound selectors may no longer be extended
2023-02-08 12:42:31 +00:00
merefield
4171d81528 linting 2023-02-08 12:34:30 +00:00
Angus McLeod
edc94b6ea7 Restrict guest support to standard and business subscriptions
- Support mapped value subscription restrictions
- Restrict permitted guest value to standard and business
2023-02-08 13:32:24 +01:00
merefield
a038e72854 bump version 2023-02-08 12:31:27 +00:00
merefield
202f6ddc06 FIX: compound selectors may no longer be extended 2023-02-08 12:28:30 +00:00
Angus McLeod
e82c158c4a Bump version 2023-02-07 14:44:40 +01:00
Angus McLeod
a931caffc1 Remove request_store and use for_input 2023-02-07 14:43:39 +01:00
Angus McLeod
0cb76659e9 Update custom-wizard-admin.js.es6 2023-02-07 13:55:08 +01:00
Angus McLeod
7657149e6f Update custom-wizard-admin.js.es6 2023-02-07 13:53:20 +01:00
Angus McLeod
1eefd99c6a Minor fixes 2023-02-07 13:17:40 +01:00
Angus McLeod
8f8c6d50c6 move guest toggle to permitted attribute 2023-02-07 12:46:17 +01:00
Angus McLeod
735d43e1ee Add failing test 2023-02-06 17:31:42 +01:00
Angus McLeod
2c84f019bb Update subscription.rb 2023-02-02 14:30:54 +01:00
Angus McLeod
82d2eee414 Fix version 2023-01-26 11:31:04 +01:00
Angus McLeod
ebdc045236
Merge branch 'main' into add_guest_support 2023-01-26 11:29:09 +01:00
Angus McLeod
b712b26896 Update COPYRIGHT.txt 2023-01-26 11:27:40 +01:00
Angus McLeod
1b3551b13d Bump version 2023-01-26 11:27:16 +01:00
Angus McLeod
dfc1540d52 Fix tests and linting 2023-01-26 11:26:24 +01:00
Angus McLeod
7d2e876584 First working version 2023-01-18 19:53:36 +01:00
jumagura
e21c3fa296 DEV: Add a new api entry 2023-01-16 00:46:12 -04:00
jumagura
24a8b95e0b DEV: Add api acceptance test 2022-12-30 17:26:32 -04:00
jumagura
146fd30ab5 DEV: Check if all tabs are displayed according to the subscription plan 2022-12-30 08:49:38 -04:00
jumagura
e88e83dd80 DEV: Unkip test for debugged code 2022-12-29 17:02:19 -04:00
jumagura
57f591e488 DEV: Update tests enabled fields 2022-12-29 14:55:08 -04:00
jumagura
8103a3b9fa DEV: Bump version 2022-12-27 12:33:11 -04:00
jumagura
be3a479270 FIX: Show an empty submission list of no wizard is selected 2022-12-27 12:30:27 -04:00
jumagura
8f42268e88 FIX: Show empty log data when no wizard is selected 2022-12-27 12:28:58 -04:00
jumagura
082139cd97 MERGE: Main branch 2022-12-27 12:25:49 -04:00
Angus McLeod
c1007e78f5 WIP 2022-12-24 09:42:09 +01:00
Marcos
794a8efdec
Merge pull request #215 from paviliondev/add_watch_tags_action
Add watch tags action
2022-12-23 14:16:36 -04:00
Angus McLeod
19ff97f0b4 Bump version 2022-12-23 17:28:29 +01:00
Angus McLeod
34ff9e4136 Add watch_tags action 2022-12-23 17:28:09 +01:00
jumagura
ded6dacd60 DEV: Remove unused admin acceptance tests 2022-12-22 00:21:29 -04:00
jumagura
2557d15a0c DEV: Add helper values for admin unsuscribed acceptance tests 2022-12-22 00:12:29 -04:00
jumagura
f0f27769fd DEV: Add helper values for admin standard acceptance tests 2022-12-22 00:11:57 -04:00
jumagura
828ded7c05 DEV: Add helper values for admin business acceptance tests 2022-12-21 23:59:03 -04:00
jumagura
d6b1655a37 DEV: Add helper values for admin submissions acceptance tests 2022-12-21 23:47:21 -04:00
jumagura
fbf7319c36 DEV: Add helper values for admin manager acceptance tests 2022-12-21 23:44:40 -04:00
jumagura
7c70e8ca75 DEV: Add helper values for admin log acceptance tests 2022-12-21 23:37:51 -04:00
jumagura
ac751b269e DEV: Remove unused import 2022-12-21 12:47:34 -04:00
jumagura
ff8294b8e9 DEV: Remove await settled in admin custom field acceptance tests 2022-12-21 12:47:05 -04:00
jumagura
ced9d768fb DEV: Change embedded response with helper values 2022-12-21 12:24:39 -04:00
jumagura
2a38aabdca DEV: Add helper values for admin acceptance tests 2022-12-21 12:23:52 -04:00
jumagura
28cf4421d4 DEV: Add manager test 2022-12-21 12:11:29 -04:00
jumagura
c866395495 DEV: Skip tests that freezes 2022-12-21 11:32:30 -04:00
jumagura
9a5328a7e9 DEV: Make test run 2022-12-21 11:30:31 -04:00
jumagura
28bb6f2886 DEV: Skip freezing acceptance test 2022-12-21 02:14:45 -04:00
jumagura
e67cf5001f FIX: Add settled to avoid render errors 2022-12-21 01:58:18 -04:00
jumagura
b7953fb882 DEV: Add settled to avoid rendering errors 2022-12-21 01:44:48 -04:00
jumagura
9583851501 DEV: Add settled to prevent rendering errors 2022-12-21 01:30:25 -04:00
jumagura
bd03d62da1 FIX: Add missing / for correct path in pretender server 2022-12-21 00:18:10 -04:00
jumagura
f54025677a DEV: Delete helper file 2022-12-20 23:57:31 -04:00
jumagura
0a03817237 DEV: Bump version 2022-12-20 23:57:04 -04:00
jumagura
039ba8f603 DEV: Create helper for pretender server response 2022-12-20 18:48:28 -04:00
jumagura
b05cbec277 DEV: Remove comments and unused code 2022-12-20 17:56:12 -04:00
jumagura
6026d67b12 DEV: Remove pause 2022-12-20 16:01:56 -04:00
jumagura
a6b6a2c025 DEV: Add admin business subscription acceptance test 2022-12-20 14:57:38 -04:00
jumagura
06366a1574 DEV: Change admin acceptance test 2022-12-20 14:57:15 -04:00
jumagura
8568a1d97f DEV: Remove repeated acceptance test 2022-12-20 13:27:00 -04:00
jumagura
786c5cd6fc DEV: Add subscribed admin test 2022-12-20 12:22:24 -04:00
jumagura
9df0fb97d5 DEV: Modify title for acceptance test 2022-12-20 12:22:01 -04:00
jumagura
0eaf7b7798 DEV: Rename wizard test file 2022-12-20 12:06:13 -04:00
jumagura
fab0095b1f DEV: Add tests to unsuscribed wizard admin 2022-12-20 12:05:27 -04:00
jumagura
953123fbf8 DEV: Add create wizard section in acceptance test 2022-12-20 01:01:32 -04:00
jumagura
23fafeaf05 Merge branch 'main' into admin-acceptance-tests 2022-12-19 11:51:41 -04:00
jumagura
230fe4a51f DEV: Add admin wizards acceptance test 2022-12-19 11:46:52 -04:00
jumagura
27186caafc DEV: Add admin manager acceptance test 2022-12-19 11:46:38 -04:00
Marcos
17fe4d732a
Merge pull request #213 from paviliondev/interpolate_user_avatar
Add avatar interpolation support
2022-12-13 12:05:03 -04:00
Angus McLeod
4fbcc9b849 Update mapper_spec.rb 2022-12-13 15:56:20 +01:00
Angus McLeod
528585db45 Ensure that we're mapping an array 2022-12-13 15:21:56 +01:00
jumagura
52d308e7b4 DEV: Add unselecting dropdown element in admin acceptance test 2022-12-13 09:23:21 -04:00
jumagura
09e56499ca DEV: Remove unused code from admin log acceptance test 2022-12-13 09:22:02 -04:00
jumagura
71b6a184ca DEV: Add admin logs acceptance test 2022-12-13 08:58:35 -04:00
jumagura
0f9fa5fe94 DEV: Add admin custom fields acceptance test 2022-12-13 04:27:41 -04:00
jumagura
cc37043195 DEV: Add admin submission acceptance test 2022-12-13 04:19:02 -04:00
Angus McLeod
621360df58 Update wizard-text-editor.js.es6 2022-12-12 13:24:12 +01:00
Angus McLeod
6a6b44a469 Version bump 2022-12-12 13:21:26 +01:00
Angus McLeod
405a4e3ffa Add avatar interpolation support 2022-12-12 13:19:04 +01:00
Angus McLeod
93ea792972
Update SECURITY.md 2022-12-07 10:55:02 +01:00
Angus McLeod
2828ee9c06
Update SECURITY.md 2022-12-07 10:54:44 +01:00
Angus McLeod
ecbbd5e1ee
Update SECURITY.md 2022-12-07 10:53:01 +01:00
Angus McLeod
d0d2921c17
Create SECURITY.md 2022-12-07 10:52:12 +01:00
Angus McLeod
971b41e15a
Merge pull request #211 from sindbach/fix_preview_url_paths
Patch for wizard URL path to take account of subdirectory base URL.
2022-11-18 16:10:06 +00:00
Wan Bachtiar
5b923f3340 Removed conditional statement that would always be true 2022-11-17 08:59:53 +11:00
Wan Bachtiar
d6ee1501d1 prettier 2022-11-11 20:43:57 +11:00
Wan Bachtiar
d68cd4a9fb Bump version 2022-11-11 16:36:18 +11:00
Wan Bachtiar
9064b2fcbb Patch for wizard URL path to take account of Discourse with subdirectory base URL. 2022-11-11 15:56:07 +11:00
Marcos
6f13f0e4bf
Merge pull request #209 from paviliondev/composer-mobile-upload
Allow upload button in wizard composer when in mobile view
2022-11-08 07:31:42 -04:00
Angus McLeod
e50ce9e5c0 Update plugin.rb 2022-11-07 15:05:13 +01:00
Angus McLeod
28e007536a IMPROVE: Allow upload button on mobile 2022-11-07 15:04:30 +01:00
Angus McLeod
54e6af52e9 Update quit text on first step 2022-11-07 14:43:46 +01:00
Marcos
5e3b0f6d2a
Merge pull request #207 from paviliondev/add_tag_creation_to_tag_field
FEATURE: add can_create_tag
2022-11-04 16:54:04 -04:00
Marcos
e4de96ed03
Merge branch 'main' into add_tag_creation_to_tag_field 2022-11-04 16:18:21 -04:00
Angus McLeod
da7153fe34 Add subscription check for API features 2022-11-01 13:38:56 +01:00
Angus McLeod
f76ae370b0 Update plugin version 2022-10-26 10:08:14 +02:00
Angus McLeod
345bb310e8 FEATURE: add can_create_tag 2022-10-26 10:04:50 +02:00
Angus McLeod
12cd8ac201 FIX: straighten-out wizard-level subscription features 2022-10-26 09:40:02 +02:00
Angus McLeod
b49e878458 Add ruby to gemfile.lock platforms and update gitignore 2022-10-20 09:30:24 +02:00
Angus McLeod
bf711a910d Update plugin.rb 2022-10-19 19:09:33 +02:00
Angus McLeod
1904001098 Add lefthook 2022-10-19 18:13:03 +02:00
Angus McLeod
92b02ed7d9 FIX: link index assignment edge cases 2022-10-19 18:07:19 +02:00
Angus McLeod
02255491d0 FIX: avatar link in wizard submissions was broken 2022-10-14 09:19:02 +02:00
Angus McLeod
4ab7c77257 FIX: fix wizard index creation 2022-10-12 10:57:40 +02:00
Angus McLeod
b2a5558de1 Version bump 2022-10-12 09:30:07 +02:00
Angus McLeod
71acc4577d FIX: indexes should not require a subscription 2022-10-12 09:28:31 +02:00
Angus McLeod
0b4c154456 Version bump 2022-10-10 14:05:08 +02:00
Angus McLeod
1dfe93ee24 Add explicit locations plugin support 2022-10-10 14:04:55 +02:00
Angus McLeod
359b165743 Bump version 2022-10-05 17:35:54 +02:00
Angus McLeod
eaf0b5f7ba Update submission_spec.rb 2022-10-05 17:29:21 +02:00
Angus McLeod
94e1d4988d Fix linting 2022-10-05 17:20:25 +02:00
Angus McLeod
1f077ce22b Bump version 2022-10-05 17:14:50 +02:00
Angus McLeod
c2e759b1c5 FIX: pagination and submitted_at ordering of submissions 2022-10-05 17:14:43 +02:00
Angus McLeod
60abb6981e FIX: re-add logic incorrectly removed submissions logic during merge 2022-09-28 14:26:27 +02:00
Angus McLeod
072a3ea142 FIX: remove incorrectly merged code 2022-09-23 18:09:49 +02:00
Angus McLeod
e38b54351f
Merge pull request #204 from paviliondev/pro-release
Custom Wizard 2.0
2022-09-23 17:47:48 +02:00
Angus McLeod
3bacb09f82 Acknowledge Kailtlin as an author 2022-09-23 17:30:55 +02:00
Angus McLeod
8f7fae0e7c Remove beta tag 2022-09-23 17:27:11 +02:00
Angus McLeod
919ac702af Merge branch 'main' into pro-release 2022-09-23 17:25:34 +02:00
Angus McLeod
61e80779ce
Merge pull request #203 from paviliondev/update_events_integration
Add automatic events plugin integration
2022-09-23 17:22:06 +02:00
Angus McLeod
ebd382cca4 Fix linting 2022-09-23 17:06:16 +02:00
Angus McLeod
12e5bef372 Add spec for action callbacks 2022-09-23 17:00:41 +02:00
Angus McLeod
aa288b19e2 Move action callbacks to action class 2022-09-23 16:52:55 +02:00
Angus McLeod
26749bd055 Add asset requiring for backwards compatibility 2022-09-23 16:23:41 +02:00
Angus McLeod
8083f44389 Bump version 2022-09-23 15:58:39 +02:00
Angus McLeod
a3db405d93 Apply prettier 2022-09-23 15:54:43 +02:00
Angus McLeod
c79dee3d16 Add community subscription as an explicit type 2022-09-23 15:52:05 +02:00
Angus McLeod
785bd5d956 Merge branch 'main' into pro-release 2022-09-22 08:20:44 +02:00
Angus McLeod
0be2b98030 Update plugin documentation domain 2022-09-20 11:16:43 +02:00
Angus McLeod
bfd4e30d36 Add automatic integration 2022-09-19 12:09:34 +02:00
Angus McLeod
b2714b524c Bump version 2022-09-02 10:01:21 +02:00
Angus McLeod
e5904846cf FIX: registered topic field names not being cast properly in actions 2022-09-02 09:45:20 +02:00
Angus McLeod
47a1a3d730 Make prettier happy 2022-08-29 11:58:42 +02:00
Angus McLeod
66808dba08 Update documentation references 2022-08-29 11:38:35 +02:00
Angus McLeod
f8d5e9296d COMPATIBILITY: previewUpdated now receives a DOM node 2022-08-25 09:49:32 +02:00
Angus McLeod
1f67f2ed4f
Merge pull request #179 from paviliondev/translations_main
I18n: Update translations
2022-08-25 08:33:51 +02:00
Keegan George
8af3fde41c New translations server.en.yml (German) 2022-08-24 08:43:03 -07:00
Keegan George
76de5e60c1 New translations client.en.yml (German) 2022-08-24 08:43:02 -07:00
Angus McLeod
b35781927f DEV: remove unused import 2022-08-24 12:02:28 +02:00
Angus McLeod
b11eea3a06 FIX: error handling needs to take account of internal discourse ajax changes 2022-08-24 11:35:17 +02:00
Angus McLeod
78a9c97e43 FIX: Ensure no access skip works for guests 2022-08-24 09:52:08 +02:00
Angus McLeod
b05ed5093e Bump version 2022-08-23 17:04:44 +02:00
Angus McLeod
6c39054853 Add notice about subscriptions to wizard admin panel 2022-08-23 17:04:30 +02:00
Angus McLeod
b3bcaa26f1 DEV: apply prettier to wizard composer editor 2022-08-22 16:10:01 +02:00
Angus McLeod
d6b4954ae3 Bump version 2022-08-22 15:57:38 +02:00
Angus McLeod
9e1dfd9cf9 FIX: simplify wizard composer event handling 2022-08-22 15:56:58 +02:00
Angus McLeod
7386be3ac0 Ensure bootstrap mode notice is hidden in wizard 2022-08-22 14:39:01 +02:00
Angus McLeod
800ec34ed3 Merge branch 'main' of https://github.com/paviliondev/discourse-custom-wizard 2022-08-18 23:04:48 +02:00
Angus McLeod
6e02c138ef Update plugin about 2022-08-18 23:04:42 +02:00
Angus McLeod
4173404bbd
Update README.md 2022-08-18 22:43:13 +02:00
Angus McLeod
0dd54255ef Update README.md 2022-08-18 13:28:43 +02:00
Angus McLeod
ff7185f742 Update README.md 2022-08-18 12:36:05 +02:00
Angus McLeod
f7d074fb05
Merge pull request #201 from paviliondev/file-upload-test
Fix manager fix uploads
2022-08-15 16:35:12 +02:00
Angus McLeod
81680033a7 Apply prettier 2022-08-15 16:16:18 +02:00
Angus McLeod
1f254732da version bump 2022-08-15 15:41:01 +02:00
Angus McLeod
cfe563e515 FIX: use native javascript instead of jquery 2022-08-15 14:36:42 +02:00
Angus McLeod
eae5fbbbb8 FIX: try using new component style 2022-08-15 14:26:36 +02:00
Angus McLeod
e59d12be95 FIX: use input event instead of change event 2022-08-15 14:00:58 +02:00
Angus McLeod
6a1f8c9cb7 DEV: site-settings:main has been replaced with service:site-settings 2022-08-15 13:53:31 +02:00
Angus McLeod
5c6b66e730 Update plugin contact email 2022-08-12 15:48:30 +01:00
Angus McLeod
ef590abce2
Update README.md 2022-08-11 10:58:41 +01:00
Angus McLeod
e75c9de052
Add banner 2022-08-11 10:58:07 +01:00
Angus McLeod
93107236ea Update README.md 2022-08-11 10:33:41 +01:00
Angus McLeod
209bb077e9 Update metadata in preparation from v2.0 2022-08-09 15:20:49 +01:00
Angus McLeod
734cc44f62 Update admin.scss 2022-08-09 15:00:26 +01:00
Angus McLeod
248e785086 Merge branch 'main' into pro-release 2022-08-09 14:56:31 +01:00
Angus McLeod
e5a91aaab5
Merge pull request #200 from paviliondev/fix_orphaned_uploads
Add upload_references for wizard step and field uploads
2022-08-02 14:04:13 +01:00
Angus McLeod
c3c87852b8 Bump version 2022-08-02 13:57:44 +01:00
Angus McLeod
5acff01708 Apply prettier 2022-08-02 13:57:19 +01:00
Angus McLeod
1e8b667e3f Working version contained within template model 2022-08-02 13:54:57 +01:00
Keegan George
c8602c13cc New translations server.en.yml (Chinese Simplified) 2022-08-02 05:01:08 -07:00
Keegan George
5856d95757 New translations client.en.yml (Portuguese) 2022-08-02 05:00:40 -07:00
Keegan George
f76185c73d New translations client.en.yml (Portuguese, Brazilian) 2022-08-02 05:00:24 -07:00
Keegan George
2812cd107f New translations client.en.yml (Chinese Traditional) 2022-08-02 05:00:19 -07:00
Angus McLeod
2cec01ba2c WIP Example 2022-08-02 12:39:56 +01:00
Angus McLeod
d4da391a4d Various rebase fixes 2022-08-01 18:07:16 +01:00
Angus McLeod
1175cbab96 Merge branch 'main' into pro-release 2022-08-01 17:48:04 +01:00
Angus McLeod
38307c565a Fix header content CSS 2022-08-01 17:18:21 +01:00
Angus McLeod
2f21358f10 Merge branch 'main' into pro-release 2022-08-01 16:44:42 +01:00
Keegan George
a6109636dd New translations server.en.yml (Portuguese, Brazilian) 2022-08-01 03:42:20 -07:00
Keegan George
6ca3f9347c New translations server.en.yml (Chinese Traditional) 2022-08-01 03:42:16 -07:00
Keegan George
bcc243ad27 New translations server.en.yml (Portuguese) 2022-08-01 03:42:08 -07:00
Keegan George
7669eb8907 New translations server.en.yml (Chinese Simplified) 2022-08-01 03:41:38 -07:00
Keegan George
bfda41a5ab New translations client.en.yml (Portuguese) 2022-08-01 03:41:02 -07:00
Keegan George
66cb18701f New translations client.en.yml (Chinese Simplified) 2022-08-01 03:40:43 -07:00
Keegan George
af77cdbefc New translations client.en.yml (Chinese Traditional) 2022-08-01 03:40:38 -07:00
Angus McLeod
0d7a220f1d FIX: direct step path error when not logged in && fix acceptance tests 2022-08-01 08:41:11 +01:00
Keegan George
af9c1ebed5 New translations server.en.yml (Chinese Simplified) 2022-07-31 03:39:02 -07:00
Keegan George
36bb8c6b8d New translations client.en.yml (Chinese Simplified) 2022-07-31 03:39:01 -07:00
Keegan George
4967ecef5b New translations client.en.yml (Japanese) 2022-07-31 03:39:00 -07:00
Keegan George
8c8a6c1c9f New translations client.en.yml (French) 2022-07-31 03:38:59 -07:00
Keegan George
37927bf63c New translations client.en.yml (Sindhi) 2022-07-30 03:32:26 -07:00
Keegan George
87acb3ba24 New translations client.en.yml (Croatian) 2022-07-30 03:32:25 -07:00
Keegan George
875429a701 New translations client.en.yml (Kazakh) 2022-07-30 03:32:24 -07:00
Keegan George
797f194c15 New translations client.en.yml (Estonian) 2022-07-30 03:32:23 -07:00
Keegan George
0248cd9469 New translations client.en.yml (Latvian) 2022-07-30 03:32:22 -07:00
Keegan George
97a75c6258 New translations client.en.yml (Azerbaijani) 2022-07-30 03:32:21 -07:00
Keegan George
14f29f5366 New translations client.en.yml (Hindi) 2022-07-30 03:32:20 -07:00
Keegan George
6d1a8dff8f New translations client.en.yml (Malay) 2022-07-30 03:32:19 -07:00
Keegan George
ca5aaf7f92 New translations client.en.yml (Telugu) 2022-07-30 03:32:18 -07:00
Keegan George
65647fc6b7 New translations client.en.yml (Tagalog) 2022-07-30 03:32:17 -07:00
Keegan George
bd66f380b7 New translations client.en.yml (Yiddish) 2022-07-30 03:32:16 -07:00
Keegan George
66fe68e88d New translations client.en.yml (Thai) 2022-07-30 03:32:15 -07:00
Keegan George
083e3cf353 New translations client.en.yml (Welsh) 2022-07-30 03:32:14 -07:00
Keegan George
9349fca152 New translations client.en.yml (Tatar) 2022-07-30 03:32:13 -07:00
Keegan George
4cf90e23b6 New translations client.en.yml (Malayalam) 2022-07-30 03:32:12 -07:00
Keegan George
18c31dd66a New translations client.en.yml (Tibetan) 2022-07-30 03:32:11 -07:00
Keegan George
087af5bfad New translations client.en.yml (Bosnian) 2022-07-30 03:32:10 -07:00
Keegan George
7f9ace13e8 New translations client.en.yml (Kannada) 2022-07-30 03:32:09 -07:00
Keegan George
afd77dc409 New translations client.en.yml (Swahili) 2022-07-30 03:32:08 -07:00
Keegan George
15cb6d67c5 New translations client.en.yml (Nepali) 2022-07-30 03:32:07 -07:00
Keegan George
a592054d1d New translations client.en.yml (Lao) 2022-07-30 03:32:06 -07:00
Keegan George
7b5f39b4b6 New translations client.en.yml (Oromo) 2022-07-30 03:32:05 -07:00
Keegan George
59086fefdd New translations client.en.yml (Esperanto) 2022-07-30 03:32:04 -07:00
Keegan George
b49385774b New translations client.en.yml (Bengali) 2022-07-30 03:32:03 -07:00
Keegan George
e34c058f42 New translations client.en.yml (Tamil) 2022-07-30 03:32:02 -07:00
Keegan George
6ff14cac23 New translations client.en.yml (Macedonian) 2022-07-30 03:32:01 -07:00
Keegan George
306fca6779 New translations client.en.yml (Lithuanian) 2022-07-30 03:32:00 -07:00
Keegan George
abc55c1e78 New translations client.en.yml (Kurdish) 2022-07-30 03:31:59 -07:00
Keegan George
747b36a840 New translations client.en.yml (Korean) 2022-07-30 03:31:58 -07:00
Keegan George
25962ac93d New translations client.en.yml (Georgian) 2022-07-30 03:31:57 -07:00
Keegan George
125a11a2b5 New translations client.en.yml (Japanese) 2022-07-30 03:31:56 -07:00
Keegan George
b9ec915f7f New translations client.en.yml (Italian) 2022-07-30 03:31:55 -07:00
Keegan George
adf5e91e9f New translations client.en.yml (Armenian) 2022-07-30 03:31:54 -07:00
Keegan George
23f3bd2b94 New translations client.en.yml (Hungarian) 2022-07-30 03:31:54 -07:00
Keegan George
a8d5165fe0 New translations client.en.yml (Hebrew) 2022-07-30 03:31:53 -07:00
Keegan George
40e6194143 New translations client.en.yml (Mongolian) 2022-07-30 03:31:52 -07:00
Keegan George
44e6fac586 New translations client.en.yml (Finnish) 2022-07-30 03:31:51 -07:00
Keegan George
52b5fd8eee New translations client.en.yml (Greek) 2022-07-30 03:31:50 -07:00
Keegan George
837f2470d1 New translations client.en.yml (German) 2022-07-30 03:31:49 -07:00
Keegan George
2b1d9c28bb New translations client.en.yml (Danish) 2022-07-30 03:31:48 -07:00
Keegan George
c4f4a7f4d9 New translations client.en.yml (Czech) 2022-07-30 03:31:47 -07:00
Keegan George
1f04cc50ca New translations client.en.yml (Catalan) 2022-07-30 03:31:46 -07:00
Keegan George
dfdf21e03a New translations client.en.yml (Bulgarian) 2022-07-30 03:31:45 -07:00
Keegan George
20cb9f3df7 New translations client.en.yml (Belarusian) 2022-07-30 03:31:44 -07:00
Keegan George
8988b1d722 New translations client.en.yml (Arabic) 2022-07-30 03:31:43 -07:00
Keegan George
f484706d98 New translations client.en.yml (Afrikaans) 2022-07-30 03:31:42 -07:00
Keegan George
967e238f8f New translations client.en.yml (Spanish) 2022-07-30 03:31:41 -07:00
Keegan George
4f84bdb87a New translations client.en.yml (Basque) 2022-07-30 03:31:40 -07:00
Keegan George
39bd40cbe1 New translations client.en.yml (French) 2022-07-30 03:31:39 -07:00
Keegan George
89a29767c5 New translations client.en.yml (Dutch) 2022-07-30 03:31:38 -07:00
Keegan George
7c2ef92672 New translations client.en.yml (Punjabi) 2022-07-30 03:31:37 -07:00
Keegan George
ef9e80263a New translations client.en.yml (Khmer) 2022-07-30 03:31:36 -07:00
Keegan George
5300d03bed New translations client.en.yml (Persian) 2022-07-30 03:31:35 -07:00
Keegan George
ce7200c90f New translations client.en.yml (Indonesian) 2022-07-30 03:31:35 -07:00
Keegan George
7181d1bbf5 New translations client.en.yml (Portuguese, Brazilian) 2022-07-30 03:31:34 -07:00
Keegan George
35cd36d395 New translations client.en.yml (Icelandic) 2022-07-30 03:31:32 -07:00
Keegan George
50a14ffe9c New translations client.en.yml (Galician) 2022-07-30 03:31:31 -07:00
Keegan George
3586079af4 New translations client.en.yml (Vietnamese) 2022-07-30 03:31:30 -07:00
Keegan George
47d150b977 New translations client.en.yml (Urdu (Pakistan)) 2022-07-30 03:31:30 -07:00
Keegan George
cad81a76cc New translations client.en.yml (Zulu) 2022-07-30 03:31:29 -07:00
Keegan George
f53a1d1f22 New translations client.en.yml (Chinese Traditional) 2022-07-30 03:31:28 -07:00
Keegan George
6d3cf642d9 New translations client.en.yml (Norwegian) 2022-07-30 03:31:27 -07:00
Keegan George
3e9edbf8c9 New translations client.en.yml (Chinese Simplified) 2022-07-30 03:31:26 -07:00
Keegan George
9000949a04 New translations client.en.yml (Turkish) 2022-07-30 03:31:25 -07:00
Keegan George
6c98daf644 New translations client.en.yml (Swedish) 2022-07-30 03:31:24 -07:00
Keegan George
090f6700e8 New translations client.en.yml (Serbian (Cyrillic)) 2022-07-30 03:31:23 -07:00
Keegan George
26c24815c5 New translations client.en.yml (Albanian) 2022-07-30 03:31:22 -07:00
Keegan George
6508e99efb New translations client.en.yml (Slovenian) 2022-07-30 03:31:21 -07:00
Keegan George
7e878a19f1 New translations client.en.yml (Slovak) 2022-07-30 03:31:20 -07:00
Keegan George
280c01d149 New translations client.en.yml (Russian) 2022-07-30 03:31:19 -07:00
Keegan George
051aaf4d0e New translations client.en.yml (Portuguese) 2022-07-30 03:31:18 -07:00
Keegan George
d36e8223b7 New translations client.en.yml (Polish) 2022-07-30 03:31:17 -07:00
Keegan George
39b9124c84 New translations client.en.yml (Ukrainian) 2022-07-30 03:31:16 -07:00
Keegan George
65812b7b4e New translations client.en.yml (Romanian) 2022-07-30 03:31:15 -07:00
Angus McLeod
556a32aa5c wizard_js locales are only loaded on the new /wizard route for non-staff 2022-07-30 11:23:12 +01:00
Angus McLeod
3fec341e97
Merge pull request #199 from OsamaSayegh/dev/replace-deprecated-component
DEV: Replace `{{user-selector}}` with `{{email-group-user-chooser}}`
2022-07-29 17:28:48 +01:00
Angus McLeod
e3efc68dc9 Bump version 2022-07-29 17:13:44 +01:00
OsamaSayegh
5d55c154c1
DEV: Replace {{user-selector}} with {{email-group-user-chooser}} 2022-07-29 18:51:58 +03:00
Angus McLeod
d9407b5d7d Hide top-notices-outlet in the wizard route 2022-07-29 16:36:06 +01:00
Angus McLeod
2414146fab FIX: step model name update 2022-07-29 16:32:41 +01:00
Keegan George
458f2b896f New translations client.en.yml (Sindhi) 2022-07-28 13:04:42 -07:00
Keegan George
3b270638bf New translations client.en.yml (Croatian) 2022-07-28 13:04:41 -07:00
Keegan George
9263a847af New translations client.en.yml (Kazakh) 2022-07-28 13:04:40 -07:00
Keegan George
e9d78f64a3 New translations client.en.yml (Estonian) 2022-07-28 13:04:39 -07:00
Keegan George
796d4c52db New translations client.en.yml (Latvian) 2022-07-28 13:04:38 -07:00
Keegan George
1354301f3c New translations client.en.yml (Azerbaijani) 2022-07-28 13:04:37 -07:00
Keegan George
292f47f58b New translations client.en.yml (Hindi) 2022-07-28 13:04:36 -07:00
Keegan George
6a0d684d50 New translations client.en.yml (Malay) 2022-07-28 13:04:35 -07:00
Keegan George
315aded76d New translations client.en.yml (Telugu) 2022-07-28 13:04:34 -07:00
Keegan George
3b8b00c712 New translations client.en.yml (Tagalog) 2022-07-28 13:04:33 -07:00
Keegan George
415fdba9fe New translations client.en.yml (Yiddish) 2022-07-28 13:04:32 -07:00
Keegan George
1182c191a0 New translations client.en.yml (Thai) 2022-07-28 13:04:31 -07:00
Keegan George
dfd7e1ad56 New translations client.en.yml (Welsh) 2022-07-28 13:04:30 -07:00
Keegan George
b9b3edd565 New translations client.en.yml (Tatar) 2022-07-28 13:04:29 -07:00
Keegan George
1f73807376 New translations client.en.yml (Malayalam) 2022-07-28 13:04:27 -07:00
Keegan George
7239404b41 New translations client.en.yml (Tibetan) 2022-07-28 13:04:26 -07:00
Keegan George
5cfd322416 New translations client.en.yml (Bosnian) 2022-07-28 13:04:25 -07:00
Keegan George
0e390e0bd6 New translations client.en.yml (Kannada) 2022-07-28 13:04:23 -07:00
Keegan George
bef18c0433 New translations client.en.yml (Swahili) 2022-07-28 13:04:22 -07:00
Keegan George
d78ecbb419 New translations client.en.yml (Nepali) 2022-07-28 13:04:21 -07:00
Keegan George
96fbdee147 New translations client.en.yml (Lao) 2022-07-28 13:04:20 -07:00
Keegan George
f2f6ebb6e7 New translations client.en.yml (Oromo) 2022-07-28 13:04:19 -07:00
Keegan George
2ad58ef79f New translations client.en.yml (Esperanto) 2022-07-28 13:04:18 -07:00
Keegan George
5aa47e1c43 New translations client.en.yml (Bengali) 2022-07-28 13:04:16 -07:00
Keegan George
da91b6df02 New translations client.en.yml (Tamil) 2022-07-28 13:04:15 -07:00
Keegan George
f057fe8339 New translations client.en.yml (Macedonian) 2022-07-28 13:04:14 -07:00
Keegan George
d46899a5df New translations client.en.yml (Lithuanian) 2022-07-28 13:04:13 -07:00
Keegan George
2b447962d1 New translations client.en.yml (Kurdish) 2022-07-28 13:04:12 -07:00
Keegan George
9f491d2541 New translations client.en.yml (Korean) 2022-07-28 13:04:11 -07:00
Keegan George
5a58607bd7 New translations client.en.yml (Georgian) 2022-07-28 13:04:10 -07:00
Keegan George
e94b0dea0e New translations client.en.yml (Japanese) 2022-07-28 13:04:09 -07:00
Keegan George
66b2d414e0 New translations client.en.yml (Italian) 2022-07-28 13:04:08 -07:00
Keegan George
cf0b847194 New translations client.en.yml (Armenian) 2022-07-28 13:04:07 -07:00
Keegan George
4fa8c92241 New translations client.en.yml (Hungarian) 2022-07-28 13:04:06 -07:00
Keegan George
ba2f892eb7 New translations client.en.yml (Hebrew) 2022-07-28 13:04:05 -07:00
Keegan George
3ef92b7859 New translations client.en.yml (Mongolian) 2022-07-28 13:04:04 -07:00
Keegan George
aa5b364e21 New translations client.en.yml (Finnish) 2022-07-28 13:04:03 -07:00
Keegan George
e6a934927c New translations client.en.yml (Greek) 2022-07-28 13:04:02 -07:00
Keegan George
f9b0895b9e New translations client.en.yml (German) 2022-07-28 13:04:00 -07:00
Keegan George
f1529294dd New translations client.en.yml (Danish) 2022-07-28 13:03:59 -07:00
Keegan George
0eafe1249d New translations client.en.yml (Czech) 2022-07-28 13:03:58 -07:00
Keegan George
c28eec978e New translations client.en.yml (Catalan) 2022-07-28 13:03:57 -07:00
Keegan George
ba9d618df0 New translations client.en.yml (Bulgarian) 2022-07-28 13:03:56 -07:00
Keegan George
8efaa58749 New translations client.en.yml (Belarusian) 2022-07-28 13:03:55 -07:00
Keegan George
2747611d5a New translations client.en.yml (Arabic) 2022-07-28 13:03:54 -07:00
Keegan George
ebd826cc9b New translations client.en.yml (Afrikaans) 2022-07-28 13:03:53 -07:00
Keegan George
01bfbc24d4 New translations client.en.yml (Spanish) 2022-07-28 13:03:52 -07:00
Keegan George
048271b136 New translations client.en.yml (Basque) 2022-07-28 13:03:51 -07:00
Keegan George
f9c4de04c4 New translations client.en.yml (French) 2022-07-28 13:03:50 -07:00
Keegan George
96b0fa47b6 New translations client.en.yml (Dutch) 2022-07-28 13:03:48 -07:00
Keegan George
f2cadf9fc2 New translations client.en.yml (Punjabi) 2022-07-28 13:03:47 -07:00
Keegan George
29d01227eb New translations client.en.yml (Khmer) 2022-07-28 13:03:46 -07:00
Keegan George
4f4a8ed8f3 New translations client.en.yml (Persian) 2022-07-28 13:03:45 -07:00
Keegan George
f36884f2dd New translations client.en.yml (Indonesian) 2022-07-28 13:03:44 -07:00
Keegan George
41807aec53 New translations client.en.yml (Portuguese, Brazilian) 2022-07-28 13:03:43 -07:00
Keegan George
6801e2885f New translations client.en.yml (Icelandic) 2022-07-28 13:03:42 -07:00
Keegan George
d88c1cf2ff New translations client.en.yml (Galician) 2022-07-28 13:03:41 -07:00
Keegan George
706c8e0413 New translations client.en.yml (Vietnamese) 2022-07-28 13:03:40 -07:00
Keegan George
b23952a0d2 New translations client.en.yml (Urdu (Pakistan)) 2022-07-28 13:03:39 -07:00
Keegan George
f2822c7520 New translations client.en.yml (Zulu) 2022-07-28 13:03:38 -07:00
Keegan George
f816073405 New translations client.en.yml (Chinese Traditional) 2022-07-28 13:03:38 -07:00
Keegan George
cc504baba6 New translations client.en.yml (Norwegian) 2022-07-28 13:03:36 -07:00
Keegan George
7c3ee8a0e1 New translations client.en.yml (Chinese Simplified) 2022-07-28 13:03:35 -07:00
Keegan George
0105be82b8 New translations client.en.yml (Turkish) 2022-07-28 13:03:34 -07:00
Keegan George
b933d41dbe New translations client.en.yml (Swedish) 2022-07-28 13:03:33 -07:00
Keegan George
a4db15adab New translations client.en.yml (Serbian (Cyrillic)) 2022-07-28 13:03:32 -07:00
Keegan George
09d40951da New translations client.en.yml (Albanian) 2022-07-28 13:03:31 -07:00
Keegan George
5aeabdd648 New translations client.en.yml (Slovenian) 2022-07-28 13:03:30 -07:00
Keegan George
83b985ac02 New translations client.en.yml (Slovak) 2022-07-28 13:03:29 -07:00
Keegan George
7268050cf7 New translations client.en.yml (Russian) 2022-07-28 13:03:28 -07:00
Keegan George
42b7264fc2 New translations client.en.yml (Portuguese) 2022-07-28 13:03:27 -07:00
Keegan George
6fce834244 New translations client.en.yml (Polish) 2022-07-28 13:03:26 -07:00
Keegan George
8b2e3e4c20 New translations client.en.yml (Ukrainian) 2022-07-28 13:03:24 -07:00
Keegan George
1cab61b373 New translations client.en.yml (Romanian) 2022-07-28 13:03:23 -07:00
Angus McLeod
72a1f9f2c2
Merge pull request #198 from paviliondev/move_custom_wizard_into_main_app
Move custom wizard into main app
2022-07-28 21:02:23 +01:00
Angus McLeod
dd74989562 Remove out of date specs 2022-07-28 20:37:10 +01:00
Angus McLeod
12e1d802a3 Remove unused build_type 2022-07-28 20:29:01 +01:00
Angus McLeod
1e56477253 Minor style fixes and deprecation handling 2022-07-28 20:26:35 +01:00
Angus McLeod
b078b9c8f4 Use custom-wizard-step-form 2022-07-28 20:12:36 +01:00
Angus McLeod
ea177b790d Update plugin-tests.yml 2022-07-27 15:55:14 +01:00
Angus McLeod
6792cfb000 Use plugin's prettier 2022-07-27 15:36:22 +01:00
Angus McLeod
039e478f47 Update admin-wizards-api-show.js.es6 2022-07-27 15:33:58 +01:00
Angus McLeod
7f233f178c Apply prettier and eslint 2022-07-27 15:30:45 +01:00
Angus McLeod
f3aed50927 Update plugin-linting workflow 2022-07-27 15:21:02 +01:00
Angus McLeod
cbc76e4810 Update plugin-linting.yml 2022-07-27 15:14:41 +01:00
Angus McLeod
b38f2b947f Update plugin-linting.yml 2022-07-27 14:52:29 +01:00
Angus McLeod
72fc36dd67 Apply prettier 2022-07-27 14:50:49 +01:00
Angus McLeod
d416cbb20e CSS Tweak 2022-07-27 14:47:51 +01:00
Angus McLeod
c6d5778d12 Update metadata 2022-07-27 14:42:08 +01:00
Angus McLeod
c3bec5a3e9 Fix linting 2022-07-27 14:40:48 +01:00
Angus McLeod
150afb29e0 Namespace CSS and remove uneccessary site attributes 2022-07-27 14:40:05 +01:00
Angus McLeod
60823cd87a First release candidate 2022-07-27 11:47:50 +01:00
Angus McLeod
11ff38ae90 Move wizard into core app first step: move the files 2022-07-26 15:18:09 +01:00
Angus McLeod
4b21566673 Merge branch 'main' into pro-release 2022-07-18 08:53:49 +01:00
Angus McLeod
c107ee2375 Merge branch 'main' into pro-release 2022-07-15 15:14:57 +01:00
Angus McLeod
8f53d25114 Merge branch 'main' into pro-release 2022-07-13 16:29:24 +01:00
Angus McLeod
e88fff7e25 Tweak preview toggle text 2022-06-02 18:05:17 +02:00
Angus McLeod
717aedb607 Tweak checkbox field description css 2022-06-02 18:00:01 +02:00
Angus McLeod
d000bc7665 Merge branch 'main' into pro-release 2022-06-02 17:51:32 +02:00
Angus McLeod
cf33fb9792 Style and other fixes for API features 2022-06-02 16:45:20 +02:00
Angus McLeod
eb8b289b50 Fix create api action 2022-05-31 13:37:34 +02:00
Angus McLeod
1d7d9d1119 Fix failing specs 2022-05-31 13:16:28 +02:00
Angus McLeod
8fd5ae7169 Ensure wizard asset paths are included 2022-05-31 13:04:35 +02:00
Angus McLeod
1c9d52bcfc Fix linting 2022-05-13 12:06:38 +02:00
Angus McLeod
45f52d56c0 Sort actions by subscription type 2022-05-13 12:04:53 +02:00
Angus McLeod
45ab9b1b80 Remove unconnected action 2022-05-13 11:52:11 +02:00
Angus McLeod
3e2faaa264 Merge branch 'main' into pro-release 2022-05-13 11:42:50 +02:00
Keegan George
883dacf347 New translations server.en.yml (Portuguese, Brazilian) 2022-04-21 23:47:21 -07:00
Keegan George
4ff50b191b New translations client.en.yml (Portuguese, Brazilian) 2022-04-21 23:47:20 -07:00
Keegan George
8dcdc9c196 New translations server.en.yml (German) 2022-04-20 23:43:06 -07:00
Keegan George
04e78c102f New translations client.en.yml (German) 2022-04-20 23:43:05 -07:00
Keegan George
5325be0308 New translations client.en.yml (German) 2022-04-19 23:46:04 -07:00
Angus McLeod
0970b49db8 Remove unnecessary extensions 2022-04-11 15:24:10 +02:00
Angus McLeod
1f320aac93 Fix tests 2022-04-11 15:16:29 +02:00
Angus McLeod
0313e1be95 Add backslash to qunit path 2022-04-11 14:56:19 +02:00
Angus McLeod
7904bb5b3a Add more env variables 2022-04-11 14:37:04 +02:00
Angus McLeod
4348a4ee68 Add more logs 2022-04-11 14:36:04 +02:00
Angus McLeod
15c0245edf Test config 2022-04-11 14:00:12 +02:00
Angus McLeod
86b0df89d1 Test config 2022-04-11 13:42:32 +02:00
Angus McLeod
0783cac9e0 Add LOAD_PLUGINS to env in action workflow 2022-04-11 12:42:26 +02:00
Angus McLeod
a87dc19eb3 Add qunit CSP extension 2022-04-11 12:21:38 +02:00
Angus McLeod
9b96c02d0f re-add qunit bootstrap conditional 2022-04-11 12:17:11 +02:00
Angus McLeod
cebc63b6d8 Try removing conditional from bootstrap 2022-04-11 11:47:33 +02:00
Angus McLeod
3c0d256e4e Update plugin.rb 2022-04-11 11:35:00 +02:00
Angus McLeod
b0ea1081a2 Update plugin-tests.yml 2022-04-11 11:31:11 +02:00
Angus McLeod
1f899935a0 Update plugin-tests.yml 2022-04-11 11:28:51 +02:00
Angus McLeod
7d941eaf5e Update bootstrap.js.es6 2022-04-11 11:10:00 +02:00
Angus McLeod
8b5b9624d7 Update wizard-qunit.js 2022-04-11 11:08:07 +02:00
Angus McLeod
305f94e9d9 Minor config updates 2022-04-11 11:02:21 +02:00
Angus McLeod
84d21f78e5 Udpate version 2022-04-11 10:01:28 +02:00
Angus McLeod
b57bf8e0fe tweak qunit format 2022-04-11 09:51:01 +02:00
Angus McLeod
9e8878e174 Move to new workflow approach (based on updated Discourse approach) 2022-04-08 16:50:49 +02:00
Angus McLeod
ef22c1d33d Increase qunit timeout 2022-04-08 16:35:40 +02:00
Angus McLeod
2d6581c60c FIX: createWizard is a route action 2022-04-04 15:07:17 +02:00
Angus McLeod
26b0fcffb0 Update plugin-tests.yml 2022-03-30 11:25:09 +02:00
Angus McLeod
15b72155c5 Update admin-wizards-wizard-show.hbs 2022-03-30 11:01:36 +02:00
Angus McLeod
1296d3bff8 Update action usage 2022-03-29 21:15:09 +02:00
Angus McLeod
466c7a7a49 Explicitly load asset paths for tests 2022-03-29 20:17:59 +02:00
Angus McLeod
a053440466 Update plugin.rb 2022-03-29 18:09:12 +02:00
Angus McLeod
c56e5dcbf8
Merge pull request #192 from paviliondev/remove_subs_and_notices
Remove subs and notices
2022-03-29 16:49:21 +02:00
Angus McLeod
04f0d34ef3 Fix specs 2022-03-25 17:08:24 +01:00
Angus McLeod
92219ace2f Apply linting 2022-03-25 12:22:27 +01:00
Angus McLeod
f607863510 Remove more subscription related things and integrate with subscription client 2022-03-25 12:18:54 +01:00
Angus McLeod
5edfb4c41e Remove subs and notices files 2022-03-16 15:49:25 +01:00
Angus McLeod
c0b93fc166
Merge pull request #191 from paviliondev/add_acceptance_tests
Add acceptance tests
2022-03-16 15:11:09 +01:00
Angus McLeod
591274d38f Skip core qunit 2022-03-16 15:07:49 +01:00
Angus McLeod
01d972f6ba Try using bundle exec 2022-03-16 14:39:39 +01:00
Angus McLeod
7e295dfb14 Update plugin-tests.yml 2022-03-16 14:22:18 +01:00
Angus McLeod
6cd6b111bd Bump minor version 2022-03-16 14:13:45 +01:00
Angus McLeod
61928ce436 Apply rubocop 2022-03-16 14:12:13 +01:00
Angus McLeod
ea52b2779b Remove duplicated functions 2022-03-16 14:10:54 +01:00
Angus McLeod
e7755b106f Update workflow to add frontend tests && handle deprecations 2022-03-16 14:09:23 +01:00
Angus McLeod
0c48435672 Merge branch 'pro-release' into add_acceptance_tests 2022-03-16 12:51:15 +01:00
Angus McLeod
835600c054 Fix linting 2022-03-16 12:46:16 +01:00
Angus McLeod
8893e6caf1 Refactor wizard client and add tests 2022-03-16 12:33:34 +01:00
Angus McLeod
d57f260def Cleanup after merge 2022-03-12 15:20:54 +01:00
Angus McLeod
69fd3d451d merge main 2022-03-12 15:08:56 +01:00
Angus McLeod
cb7bb4e12f Move to proper folder structure 2022-03-12 14:49:41 +01:00
Angus McLeod
b20b8ce333 WIP 2 2022-02-17 17:08:14 +11:00
Angus McLeod
b62aee8a48 WIP 2022-02-15 17:16:21 +11:00
Keegan George
363ce6a83f New translations client.en.yml (Sindhi) 2022-02-06 21:49:23 -08:00
Keegan George
294878d376 New translations client.en.yml (Croatian) 2022-02-06 21:49:22 -08:00
Keegan George
be684274a3 New translations client.en.yml (Kazakh) 2022-02-06 21:49:21 -08:00
Keegan George
4c0e95bddb New translations client.en.yml (Estonian) 2022-02-06 21:49:20 -08:00
Keegan George
3ccfeced5d New translations client.en.yml (Latvian) 2022-02-06 21:49:19 -08:00
Keegan George
a6a87b8471 New translations client.en.yml (Azerbaijani) 2022-02-06 21:49:18 -08:00
Keegan George
c1b4971bd9 New translations client.en.yml (Hindi) 2022-02-06 21:49:17 -08:00
Keegan George
d71808048d New translations client.en.yml (Malay) 2022-02-06 21:49:16 -08:00
Keegan George
57e3bc7421 New translations client.en.yml (Telugu) 2022-02-06 21:49:15 -08:00
Keegan George
61e2817503 New translations client.en.yml (Tagalog) 2022-02-06 21:49:14 -08:00
Keegan George
bf5ce61ede New translations client.en.yml (Yiddish) 2022-02-06 21:49:13 -08:00
Keegan George
f1007b1483 New translations client.en.yml (Thai) 2022-02-06 21:49:12 -08:00
Keegan George
649f014466 New translations client.en.yml (Welsh) 2022-02-06 21:49:11 -08:00
Keegan George
6c1d2df7e1 New translations client.en.yml (Tatar) 2022-02-06 21:49:10 -08:00
Keegan George
90a7512a33 New translations client.en.yml (Malayalam) 2022-02-06 21:49:09 -08:00
Keegan George
18bba7a92b New translations client.en.yml (Tibetan) 2022-02-06 21:49:08 -08:00
Keegan George
01a4469af5 New translations client.en.yml (Bosnian) 2022-02-06 21:49:07 -08:00
Keegan George
fe56e3beff New translations client.en.yml (Kannada) 2022-02-06 21:49:06 -08:00
Keegan George
ccc5103e21 New translations client.en.yml (Swahili) 2022-02-06 21:49:05 -08:00
Keegan George
ba235bac67 New translations client.en.yml (Nepali) 2022-02-06 21:49:04 -08:00
Keegan George
9aefb688a9 New translations client.en.yml (Lao) 2022-02-06 21:49:03 -08:00
Keegan George
2f2072509d New translations client.en.yml (Oromo) 2022-02-06 21:49:02 -08:00
Keegan George
56b795af5d New translations client.en.yml (Esperanto) 2022-02-06 21:49:01 -08:00
Keegan George
3ee4aaf083 New translations client.en.yml (Bengali) 2022-02-06 21:48:59 -08:00
Keegan George
7563608b45 New translations client.en.yml (Tamil) 2022-02-06 21:48:58 -08:00
Keegan George
9f25125510 New translations client.en.yml (Macedonian) 2022-02-06 21:48:57 -08:00
Keegan George
b5022cc07b New translations client.en.yml (Lithuanian) 2022-02-06 21:48:56 -08:00
Keegan George
15a653ddd9 New translations client.en.yml (Kurdish) 2022-02-06 21:48:55 -08:00
Keegan George
56af532903 New translations client.en.yml (Korean) 2022-02-06 21:48:54 -08:00
Keegan George
24752365f7 New translations client.en.yml (Georgian) 2022-02-06 21:48:53 -08:00
Keegan George
eb3c190649 New translations client.en.yml (Japanese) 2022-02-06 21:48:52 -08:00
Keegan George
14f79bd4c8 New translations client.en.yml (Italian) 2022-02-06 21:48:51 -08:00
Keegan George
462b8fef72 New translations client.en.yml (Armenian) 2022-02-06 21:48:50 -08:00
Keegan George
0dc9cdd86a New translations client.en.yml (Hungarian) 2022-02-06 21:48:49 -08:00
Keegan George
9d95ec8811 New translations client.en.yml (Hebrew) 2022-02-06 21:48:48 -08:00
Keegan George
12c37bd733 New translations client.en.yml (Mongolian) 2022-02-06 21:48:47 -08:00
Keegan George
a57d1b5043 New translations client.en.yml (Finnish) 2022-02-06 21:48:46 -08:00
Keegan George
c07337de2e New translations client.en.yml (Greek) 2022-02-06 21:48:45 -08:00
Keegan George
3f56dc9134 New translations client.en.yml (German) 2022-02-06 21:48:44 -08:00
Keegan George
18b28f5b80 New translations client.en.yml (Danish) 2022-02-06 21:48:43 -08:00
Keegan George
421e64ac46 New translations client.en.yml (Czech) 2022-02-06 21:48:42 -08:00
Keegan George
76bf5631e1 New translations client.en.yml (Catalan) 2022-02-06 21:48:41 -08:00
Keegan George
eb9c443484 New translations client.en.yml (Bulgarian) 2022-02-06 21:48:40 -08:00
Keegan George
df9494e461 New translations client.en.yml (Belarusian) 2022-02-06 21:48:39 -08:00
Keegan George
c57c551129 New translations client.en.yml (Arabic) 2022-02-06 21:48:38 -08:00
Keegan George
22b9698f2b New translations client.en.yml (Afrikaans) 2022-02-06 21:48:37 -08:00
Keegan George
1c4422d7e2 New translations client.en.yml (Spanish) 2022-02-06 21:48:36 -08:00
Keegan George
15539eb0c3 New translations client.en.yml (Basque) 2022-02-06 21:48:35 -08:00
Keegan George
681ba4e5b4 New translations client.en.yml (French) 2022-02-06 21:48:34 -08:00
Keegan George
0f58fe5aab New translations client.en.yml (Dutch) 2022-02-06 21:48:33 -08:00
Keegan George
27396538ad New translations client.en.yml (Punjabi) 2022-02-06 21:48:32 -08:00
Keegan George
24be61e593 New translations client.en.yml (Khmer) 2022-02-06 21:48:31 -08:00
Keegan George
f967f792d2 New translations client.en.yml (Persian) 2022-02-06 21:48:30 -08:00
Keegan George
7bea8c1c12 New translations client.en.yml (Indonesian) 2022-02-06 21:48:29 -08:00
Keegan George
a75fc1f2d4 New translations client.en.yml (Icelandic) 2022-02-06 21:48:28 -08:00
Keegan George
1b69c1919a New translations client.en.yml (Galician) 2022-02-06 21:48:26 -08:00
Keegan George
3a922f7a93 New translations client.en.yml (Vietnamese) 2022-02-06 21:48:25 -08:00
Keegan George
a0688b81a2 New translations client.en.yml (Urdu (Pakistan)) 2022-02-06 21:48:24 -08:00
Keegan George
8dc59745e6 New translations client.en.yml (Zulu) 2022-02-06 21:48:23 -08:00
Keegan George
1d1ac820f5 New translations client.en.yml (Chinese Traditional) 2022-02-06 21:48:22 -08:00
Keegan George
69942a8a58 New translations client.en.yml (Norwegian) 2022-02-06 21:48:22 -08:00
Keegan George
a5fd54a3ee New translations client.en.yml (Chinese Simplified) 2022-02-06 21:48:21 -08:00
Keegan George
5e231c3e7b New translations client.en.yml (Turkish) 2022-02-06 21:48:19 -08:00
Keegan George
3df6fcbf0c New translations client.en.yml (Swedish) 2022-02-06 21:48:18 -08:00
Keegan George
ec650a1f67 New translations client.en.yml (Serbian (Cyrillic)) 2022-02-06 21:48:18 -08:00
Keegan George
bed0483e64 New translations client.en.yml (Albanian) 2022-02-06 21:48:16 -08:00
Keegan George
5b3550bdde New translations client.en.yml (Slovenian) 2022-02-06 21:48:15 -08:00
Keegan George
b1d5c888c4 New translations client.en.yml (Slovak) 2022-02-06 21:48:14 -08:00
Keegan George
91c9644fb1 New translations client.en.yml (Russian) 2022-02-06 21:48:13 -08:00
Keegan George
71c101290c New translations client.en.yml (Portuguese) 2022-02-06 21:48:12 -08:00
Keegan George
87f7b22103 New translations client.en.yml (Polish) 2022-02-06 21:48:11 -08:00
Keegan George
47df65292c New translations client.en.yml (Ukrainian) 2022-02-06 21:48:10 -08:00
Keegan George
f0f16ce4dc New translations client.en.yml (Romanian) 2022-02-06 21:48:09 -08:00
angusmcleod
4605b23585 Merge branch 'main' into pro-release 2022-01-27 17:51:24 +08:00
angusmcleod
7af77533ba Add https to notice requests 2021-11-25 14:38:16 +08:00
angusmcleod
fac8d821cf publish notice count at the end of the update cycle 2021-11-18 17:07:15 +08:00
angusmcleod
e1a746ca28 Add pluginId and console.logs 2021-11-18 16:32:23 +08:00
angusmcleod
559d3f4f19 Use iso times for the notice timestamps 2021-11-18 16:05:32 +08:00
Angus McLeod
75d881de06
Merge pull request #157 from paviliondev/add_notice_inbox
Add notice inbox
2021-11-17 21:04:52 +08:00
angusmcleod
49538d554d Linting 2021-11-17 20:48:11 +08:00
angusmcleod
853634be27 Fix failing specs 2021-11-17 20:26:44 +08:00
angusmcleod
98061c14e8 Fix spec (mostly) 2021-11-17 20:26:44 +08:00
angusmcleod
81bb7e56c2 WIP 2021-11-17 20:26:44 +08:00
Angus McLeod
bbd1253891
Merge pull request #147 from paviliondev/pro-release-api
Pro release api
2021-11-17 20:18:54 +08:00
angusmcleod
457463f7c7 Add blankspace 2021-11-10 22:25:42 +08:00
merefield
e37b2a6e85 Remove semi colon! 2021-11-09 15:04:04 +00:00
merefield
584ee6d24e remove redundant returns 2021-11-09 15:01:17 +00:00
merefield
c6b8e08e38 Add subscription level logic to back-end validation 2021-11-09 14:57:33 +00:00
angusmcleod
9ab441f888 Update plugin metadata 2021-11-09 20:38:53 +08:00
merefield
14a337e00c template lint 2021-11-02 09:11:30 +00:00
merefield
3add43e81b eslint 2021-11-02 09:09:06 +00:00
merefield
8cbc8745b9 prettier 2021-11-02 09:06:00 +00:00
merefield
bd5edaffe9 custom field input: further make generic, fix serializers dropdown 2021-11-02 08:58:15 +00:00
merefield
a3d59caee8 yet more linting fixes 2021-10-27 15:05:09 +01:00
merefield
203876e927 linting fixes 2021-10-27 15:01:29 +01:00
merefield
60388b7dab fix more linting errors 2021-10-27 14:52:22 +01:00
merefield
31b4663b3f Fix linting errors 2021-10-27 14:41:49 +01:00
merefield
0c9acb9b20 Update subscription titles 2021-10-27 14:31:24 +01:00
merefield
0752f8068a fix subscription spec 2021-10-27 14:09:34 +01:00
merefield
791eab6c47 Fix action spec example 2021-10-27 14:02:21 +01:00
merefield
36257fbdfe fix excon call 2021-10-27 13:59:50 +01:00
merefield
9350db5424 REFACTOR: abstract subscription logic to reduce code 2021-10-25 18:55:28 +01:00
merefield
7b129debac partial generalisation of subscription logic 2021-10-25 15:31:44 +01:00
merefield
a806e14c64 Admin custom fields subscription differentiation 2021-10-23 13:06:12 +01:00
merefield
5334d12f10 format code 2021-10-22 19:57:16 +01:00
merefield
fbab8d89a5 Update action dropdown behaviour to show sub level 2021-10-22 19:56:00 +01:00
merefield
41e0f13b25 update subscription types 2021-10-22 19:24:28 +01:00
merefield
50176b400d more rubocop 2021-10-22 19:07:45 +01:00
merefield
0b8fced879 rubocop changes 2021-10-22 19:04:37 +01:00
merefield
30fe73570a remove triple curlies 2021-10-22 15:38:38 +01:00
merefield
b4f463778d fix linting issues 2021-10-19 13:49:06 +01:00
merefield
b616adaf71 fix linting 2021-10-19 13:13:32 +01:00
merefield
487ad3c46d Fix test 2021-10-19 13:09:11 +01:00
angusmcleod
231051d8ea Update status domains 2021-10-19 16:08:03 +08:00
merefield
deb4460d2c modify dropdown sub text slightly 2021-10-14 13:53:58 +01:00
merefield
a42e23d352 Show but differentiate unsubbed action options 2021-10-14 13:41:24 +01:00
Robert Barrow
a13096c8f1 merge in pro-release branch 2021-10-13 14:22:33 +01:00
angusmcleod
450f7bfc25 Update notice.rb 2021-10-13 19:32:49 +08:00
Robert Barrow
e5fbc408f5 Add failing API call test 2021-10-12 14:49:09 +01:00
Robert Barrow
3e2907abc2 show api for complete sub 2021-10-12 14:37:36 +01:00
Robert Barrow
d4e489456e rename functional levels 2021-10-12 13:01:39 +01:00
Robert Barrow
67cfeb6ed9 Distinguish actions which require additional subscription 2021-10-12 12:51:38 +01:00
Robert Barrow
14e7e9c0db improve api section switch 2021-10-12 09:54:52 +01:00
angusmcleod
702ccc868c Update connection_error.rb 2021-10-12 09:45:50 +08:00
angusmcleod
b475e39ee9 Fix specs 2021-10-07 21:19:19 +08:00
angusmcleod
925c8c009a DEV: Add notice specs and UI updates 2021-10-05 20:54:06 +08:00
merefield
1f939c1ca0 API: only show API menu on business sub 2021-10-05 10:20:36 +01:00
merefield
31e275668c API: remove byebug 2021-10-05 10:19:47 +01:00
merefield
5a424e8e3d API: add mocked request spec 2021-10-05 10:07:20 +01:00
merefield
6056351b7c API: fix request call 2021-10-05 10:06:15 +01:00
merefield
a2ebd5c463 API: don't present an API menu entry if not subscribed 2021-10-04 18:51:47 +01:00
merefield
c9453a0bdd API: remove GET method from API options 2021-10-04 14:40:17 +01:00
angusmcleod
084c6f4a7a wip 2021-09-24 17:58:42 +08:00
angusmcleod
270d3bccf5 IMPROVE: translation feature 2021-09-14 11:33:16 +08:00
angusmcleod
10fb3ee176 Merge branch 'master' into pro-release 2021-09-09 14:39:49 +08:00
angusmcleod
7b57e7fcab Apply new table style to wizard logs view 2021-09-09 14:07:12 +08:00
angusmcleod
a8e81150f1 Remove additional sentence from submissions.viewing 2021-09-08 18:25:30 +08:00
Angus McLeod
13304f5b6d
Merge pull request #144 from paviliondev/pro-features
Pro features
2021-09-07 21:58:14 +08:00
angusmcleod
4a0d176f1a Fix locale file 2021-09-07 20:55:46 +08:00
angusmcleod
18c43f499e Apply template lint 2021-09-07 20:53:45 +08:00
angusmcleod
ba897abf8e Apply eslint 2021-09-07 20:15:04 +08:00
angusmcleod
33824de1d1 Merge branch 'pro-features' of https://github.com/angusmcleod/discourse-custom-wizard into pro-features 2021-09-07 20:13:13 +08:00
angusmcleod
0313c773e8 Apply prettier 2021-09-07 20:13:01 +08:00
angusmcleod
7c9a0ef862 Apply rubocop 2021-09-07 20:11:50 +08:00
Angus McLeod
f4d419cac2
Merge branch 'pro-release' into pro-features 2021-09-07 20:10:12 +08:00
angusmcleod
23c4b45195 Add pro feature specs 2021-09-07 20:06:13 +08:00
Angus McLeod
3383aec37f
Merge pull request #142 from paviliondev/ui_conventions
UX: Update Submissions Admin UI
2021-09-06 22:51:52 +08:00
angusmcleod
5063e3eaeb Merge branch 'ui_conventions' of https://github.com/paviliondev/discourse-custom-wizard into pr/142 2021-09-06 17:26:34 +08:00
angusmcleod
31b9e48c8f Apply rubocop 2021-09-06 17:26:22 +08:00
angusmcleod
f6c3c98d71 Add submission serializer spec 2021-09-06 17:25:08 +08:00
angusmcleod
8dbb3990e4 Remove test change 2021-09-03 16:46:43 +08:00
angusmcleod
6ef333a657 Complete pro-feature functionality 2021-09-03 16:46:32 +08:00
Keegan George
c60d1e3338 DEV: Run Prettier 💄 2021-09-02 15:46:49 -07:00
Keegan George
4abe30464c DEV: Run Prettier💄 2021-09-02 15:43:34 -07:00
Keegan George
1e38001942 DEV: Run Prettier 💄 2021-09-02 15:41:55 -07:00
Keegan George
9fc2092951 DEV: Run prettier 💄 2021-09-02 15:38:30 -07:00
Angus McLeod
450a94e38d
Merge pull request #143 from paviliondev/split_log_messages
DEV: split log messages
2021-09-02 14:48:49 +08:00
Keegan George
7b13605c7b FIX: Resolve linting issues 2021-09-01 12:46:39 -07:00
Keegan George
622ab1b2ce Merge branch 'pro-release' of https://github.com/paviliondev/discourse-custom-wizard into ui_conventions 2021-09-01 12:38:09 -07:00
KC Maddever
e34f2b5076 Merge branch 'pro-release' into split_log_messages 2021-09-01 16:51:28 +08:00
angusmcleod
403f063b0f Fix failing specs 2021-09-01 11:10:49 +08:00
angusmcleod
0e5fc756df Fix merge issues 2021-09-01 10:46:52 +08:00
angusmcleod
001d116298 Merge branch 'master' into pro-release 2021-09-01 10:37:50 +08:00
angusmcleod
6b1e7568c1 Improve PRO feature approach 2021-09-01 10:19:00 +08:00
Keegan George
280d2ffe54 IMPROVE: Make edit columns adjust submissions as well 2021-08-31 13:29:30 -07:00
KC Maddever
399cc9c220 DEV: rubocop 2021-08-31 14:43:21 +08:00
KC Maddever
c394656ed8 DEV: update tests for split log fields 2021-08-31 14:34:47 +08:00
KC Maddever
35ff172967 DEV: specify which fields to split in log data migration 2021-08-31 14:33:16 +08:00
KC Maddever
b79039c2e2 DEV: save logs with split fields 2021-08-31 14:33:16 +08:00
KC Maddever
aa928c319e DEV: add data migration to split out log fields 2021-08-31 14:33:16 +08:00
Keegan George
0bc151fc7b WIP: Edit Columns modal functionality
Currently modal and edit columns works but removes only field and not corresponding submission.
2021-08-30 16:33:48 -07:00
Keegan George
d74d3d25be UX: Display submission fields unique to each type 2021-08-30 16:23:33 -07:00
Keegan George
466229af0b Merge branch 'ui_conventions' of https://github.com/paviliondev/discourse-custom-wizard into ui_conventions 2021-08-30 11:58:19 -07:00
angusmcleod
03fb7b7ada WIP: update field data handling to support column toggling 2021-08-25 09:59:24 +08:00
angusmcleod
a810155f91 Clean up pro constants 2021-08-18 14:59:43 +08:00
angusmcleod
eadc40bdae Add CustomWizard class protections and pro feature restrictions 2021-08-18 14:11:00 +08:00
angusmcleod
eff1d2c7d2 Merge branch 'master' into pro-features 2021-08-17 19:35:10 +08:00
angusmcleod
e81b773512 Move pro conditions out of advanced section 2021-08-10 17:18:49 +08:00
angusmcleod
f49f516403 Add pro restriction 2021-08-10 17:00:42 +08:00
angusmcleod
a7904a28af Update pro admin title attributes 2021-08-10 15:32:21 +08:00
angusmcleod
a27c222dc6 Update authentication and subscription handling 2021-08-10 14:45:23 +08:00
Keegan George
ae271ce647
UX: Add support button to admin-nav (#118)
* Add support button to admin-nav

* FIX: Security vulnerabilities with _blank anchor link

* Update pro support url

* UX: Create pro button custom styling

* UX: Merge support button focus styling with hover

* DEV: Move pro support url to setting

* UX: Change support button name to Pro Support

* DEV: Format stylesheet code

* DEV: Use variables and change selector specificity for pro button

* DEV: Hardcode pro-support url in button

* DEV: Remove support url localization

* DEV: Undo formatting fixes and add pro support button strings

* DEV: Undo formatting fixes auto applied

* DEV: Add space between selectors

* DEV: Convert scss variables to CSS Custom properties

* DEV: Fix linting

* FIX: Use SCSS variables for color manipulation functions

* DEV: Fix space before i18n

* DEV: Add new line at end of file

* DEV: Add new line at end of file

* DEV: Remove name attribute in localizations

* DEV: Remove padding from new line
2021-08-09 14:44:44 -07:00
Keegan George
51038ade8a FIX: Update help text in wizard message bar 2021-07-26 10:44:08 -07:00
angusmcleod
55b92f4256 IMPROVE: Add additional data to submission serialiser 2021-07-21 11:31:03 +08:00
Keegan George
543b676f53 Merge branch 'pro-release' of https://github.com/paviliondev/discourse-custom-wizard into ui_conventions 2021-07-19 09:30:48 -07:00
Keegan George
5f5adf93e4
Merge pull request #134 from paviliondev/admin-ui-support
IMPROVE: Admin UI support
2021-07-19 09:18:28 -07:00
Keegan George
bdc4044581 Merge branch 'pro-release' of https://github.com/paviliondev/discourse-custom-wizard into ui_conventions 2021-07-19 07:11:47 -07:00
angusmcleod
1a78b44d35 Apply rubocop 2021-07-14 14:06:54 +08:00
angusmcleod
56a1463413 Apply prettier 2021-07-14 14:05:13 +08:00
angusmcleod
34fee3729c Add pagination to submissions 2021-07-14 14:04:19 +08:00
Keegan George
d8a24eb940 Merge https://github.com/paviliondev/discourse-custom-wizard into ui_conventions 2021-06-18 12:04:17 -07:00
Keegan George
dd8513a563 UX: Add wizard-message component to logs pane 2021-06-18 11:47:24 -07:00
Keegan George
10c7c8bcc0 UX: Change info message when selecting a wizard in the submissions pane 2021-06-18 11:25:51 -07:00
Keegan George
c490da3145 UX: Add wizard message component to submissions page 2021-06-18 10:25:01 -07:00
508 geänderte Dateien mit 20251 neuen und 43471 gelöschten Zeilen

Datei anzeigen

@ -1,2 +1,3 @@
3.1.999: 1f35b80f85e5fd1efb7f4851f0845700432febdc
2.7.99: e07a57e398b6b1676ab42a7e34467556fca5416b 2.7.99: e07a57e398b6b1676ab42a7e34467556fca5416b
2.5.1: bb85b3a0d2c0ab6b59bcb405731c39089ec6731c 2.5.1: bb85b3a0d2c0ab6b59bcb405731c39089ec6731c

13
.github/workflows/discourse-plugin.yml gevendort Normale Datei
Datei anzeigen

@ -0,0 +1,13 @@
name: Discourse Plugin
on:
push:
branches:
- main
pull_request:
schedule:
- cron: "0 0 * * *"
jobs:
ci:
uses: discourse/.github/.github/workflows/discourse-plugin.yml@v1

Datei anzeigen

@ -1,53 +0,0 @@
name: Linting
on:
push:
branches:
- master
- main
- stable
pull_request:
schedule:
- cron: '0 0 * * *'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v1
with:
node-version: 14
- name: Set up ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: 2.7
- name: Setup bundler
run: gem install bundler -v 2.1.4 --no-doc
- name: Setup gems
run: bundle install --jobs 4
- name: Yarn install
run: yarn install --dev
- name: ESLint
run: yarn eslint --ext .js,.js.es6 --no-error-on-unmatched-pattern {test,assets}/javascripts/{discourse,wizard}
- name: Prettier
run: |
yarn prettier -v
if [ -d "assets" ]; then \
yarn prettier --list-different "assets/javascripts/{discourse,wizard}/**/*.{scss,js,es6}" ; \
fi
- name: Ember template lint
run: yarn ember-template-lint assets/javascripts
- name: Rubocop
run: bundle exec rubocop .

Datei anzeigen

@ -36,9 +36,9 @@ jobs:
uses: actions/github-script@v5 uses: actions/github-script@v5
with: with:
script: | script: |
const semver = require('semver'); const semver = require('semver');
const { head_version, base_version } = process.env; const { head_version, base_version } = process.env;
if (semver.lte(head_version, base_version)) { if (semver.lte(head_version, base_version)) {
core.setFailed("Head version is equal to or lower than base version."); core.setFailed("Head version is equal to or lower than base version.");
} }

Datei anzeigen

@ -1,134 +0,0 @@
name: Plugin Tests
on:
push:
branches:
- stable
- master
- main
pull_request:
schedule:
- cron: '0 */12 * * *'
jobs:
build:
name: ${{ matrix.build_type }}
runs-on: ubuntu-latest
timeout-minutes: 60
env:
DISCOURSE_HOSTNAME: www.example.com
RUBY_GLOBAL_METHOD_CACHE_SIZE: 131072
RAILS_ENV: test
PGHOST: localhost
PGUSER: discourse
PGPASSWORD: discourse
strategy:
fail-fast: false
matrix:
build_type: ["backend", "frontend"]
ruby: ["2.7"]
postgres: ["12"]
redis: ["6.x"]
services:
postgres:
image: postgres:${{ matrix.postgres }}
ports:
- 5432:5432
env:
POSTGRES_USER: discourse
POSTGRES_PASSWORD: discourse
options: >-
--mount type=tmpfs,destination=/var/lib/postgresql/data
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- uses: haya14busa/action-cond@v1
id: discourse_branch
with:
cond: ${{ github.base_ref == 'stable' }}
if_true: "stable"
if_false: "tests-passed"
- uses: actions/checkout@v3
with:
repository: discourse/discourse
ref: ${{ steps.discourse_branch.outputs.value }}
fetch-depth: 1
- name: Install plugin
uses: actions/checkout@v2
with:
path: plugins/${{ github.event.repository.name }}
ref: "${{ github.head_ref }}"
fetch-depth: 1
- name: Setup Git
run: |
git config --global user.email "ci@ci.invalid"
git config --global user.name "Discourse CI"
- name: Setup packages
run: |
sudo apt-get update
sudo apt-get -yqq install postgresql-client libpq-dev gifsicle jpegoptim optipng jhead
wget -qO- https://raw.githubusercontent.com/discourse/discourse_docker/master/image/base/install-pngquant | sudo sh
- name: Update imagemagick
if: matrix.build_type == 'backend'
run: |
wget https://raw.githubusercontent.com/discourse/discourse_docker/master/image/base/install-imagemagick
chmod +x install-imagemagick
sudo ./install-imagemagick
- name: Setup redis
uses: shogo82148/actions-setup-redis@v1
with:
redis-version: ${{ matrix.redis }}
- name: Setup ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby }}
bundler-cache: true
- name: Lint English locale
if: matrix.build_type == 'backend'
run: bundle exec ruby script/i18n_lint.rb "plugins/${{ steps.repo-name.outputs.value }}/locales/{client,server}.en.yml"
- name: Get yarn cache directory
id: yarn-cache-dir
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Yarn cache
uses: actions/cache@v2
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir.outputs.dir }}
key: ${{ runner.os }}-${{ matrix.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-${{ matrix.os }}-yarn-
- name: Yarn install
run: yarn install --dev
- name: Migrate database
run: |
bin/rake db:create
bin/rake db:migrate
- name: Plugin RSpec with Coverage
if: matrix.build_type == 'backend'
run: |
if [ -e plugins/${{ steps.repo-name.outputs.value }}/.simplecov ]
then
cp plugins/${{ steps.repo-name.outputs.value }}/.simplecov .simplecov
export COVERAGE=1
fi
bin/rake plugin:spec[${{ steps.repo-name.outputs.value }}]

3
.gitignore gevendort
Datei anzeigen

@ -1,7 +1,8 @@
coverage/* coverage/*
!coverage/.last_run.json !coverage/.last_run.json
gems/ gems/*
.bundle/ .bundle/
auto_generated auto_generated
.DS_Store .DS_Store
node_modules/ node_modules/
vendor/*

Datei anzeigen

@ -1,2 +1,8 @@
inherit_gem: inherit_gem:
rubocop-discourse: default.yml rubocop-discourse: default.yml
RSpec/ContextWording:
Enabled: false
RSpec/DescribeClass:
Enabled: false

Datei anzeigen

@ -1,4 +1,4 @@
All code in this repository is Copyright 2018 by Angus McLeod. All code in this repository is Copyright 2023 by Angus McLeod.
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by

Datei anzeigen

@ -2,31 +2,32 @@ GEM
remote: https://rubygems.org/ remote: https://rubygems.org/
specs: specs:
ast (2.4.2) ast (2.4.2)
parallel (1.20.1) json (2.6.2)
parser (3.0.1.0) parallel (1.22.1)
parser (3.1.2.1)
ast (~> 2.4.1) ast (~> 2.4.1)
rainbow (3.0.0) rainbow (3.1.1)
regexp_parser (2.1.1) regexp_parser (2.6.0)
rexml (3.2.5) rexml (3.2.5)
rubocop (1.12.1) rubocop (1.36.0)
json (~> 2.3)
parallel (~> 1.10) parallel (~> 1.10)
parser (>= 3.0.0.0) parser (>= 3.1.2.1)
rainbow (>= 2.2.2, < 4.0) rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 1.8, < 3.0) regexp_parser (>= 1.8, < 3.0)
rexml rexml (>= 3.2.5, < 4.0)
rubocop-ast (>= 1.2.0, < 2.0) rubocop-ast (>= 1.20.1, < 2.0)
ruby-progressbar (~> 1.7) ruby-progressbar (~> 1.7)
unicode-display_width (>= 1.4.0, < 3.0) unicode-display_width (>= 1.4.0, < 3.0)
rubocop-ast (1.4.1) rubocop-ast (1.22.0)
parser (>= 2.7.1.5) parser (>= 3.1.1.0)
rubocop-discourse (2.4.1) rubocop-discourse (3.0)
rubocop (>= 1.1.0) rubocop (>= 1.1.0)
rubocop-rspec (>= 2.0.0) rubocop-rspec (>= 2.0.0)
rubocop-rspec (2.2.0) rubocop-rspec (2.13.2)
rubocop (~> 1.0) rubocop (~> 1.33)
rubocop-ast (>= 1.1.0)
ruby-progressbar (1.11.0) ruby-progressbar (1.11.0)
unicode-display_width (2.0.0) unicode-display_width (2.3.0)
PLATFORMS PLATFORMS
ruby ruby

Datei anzeigen

@ -1,3 +1,27 @@
# discourse-custom-wizard # Discourse Custom Wizard Plugin
See further: https://thepavilion.io/c/knowledge/discourse/custom-wizard/118 The Custom Wizard Plugin lets you make forms for your Discourse forum. Better user onboarding, structured posting, data enrichment, automated actions and much more for your community.
<img src="https://camo.githubusercontent.com/593432f1fc9658ffca104065668cc88fa21dffcd3002cb78ffd50c71f33a2523/68747470733a2f2f706176696c696f6e2d6173736574732e6e7963332e63646e2e6469676974616c6f6365616e7370616365732e636f6d2f706c7567696e732f77697a6172642d7265706f7369746f72792d62616e6e65722e706e67" alt="" data-canonical-src="https://pavilion-assets.nyc3.cdn.digitaloceanspaces.com/plugins/wizard-repository-banner.png" style="max-width: 100%;" width="400">
👋 Looking to report an issue? We're managing issues for this plugin using our [bug report wizard](https://coop.pavilion.tech/w/bug-report).
## Install
If you're not sure how to install a plugin in Discourse, please follow the [plugin installation guide](https://meta.discourse.org/t/install-a-plugin/19157) or contact your Discourse hosting provider.
## Documentation
[Read the full documentation here](https://coop.pavilion.tech/c/82), or go directly to the relevant section
- [Wizard Administration](https://coop.pavilion.tech/t/1602)
- [Wizard Settings](https://coop.pavilion.tech/t/1614)
- [Step Settings](https://coop.pavilion.tech/t/1735)
- [Field Settings](https://coop.pavilion.tech/t/1580)
- [Conditional Settings](https://coop.pavilion.tech/t/1673)
- [Field Interpolation](https://coop.pavilion.tech/t/1557)
- [Handling Dates and Times](https://coop.pavilion.tech/t/1708)
## Support
- [Report an issue](https://coop.pavilion.tech/w/bug-report)

7
SECURITY.md Normale Datei
Datei anzeigen

@ -0,0 +1,7 @@
# Security Policy
The security of Discourse plugins are premised on the security of [Discourse](https://github.com/discourse/discourse). Please first consider whether a security issue is best reported and handled by the Discourse team. You can view the Discourse security policy [here](https://github.com/discourse/discourse/security/policy).
## Reporting a Vulnerability
If you find a security vulnerability that is specific to this plugin, please report it to development@pavilion.tech. Security issues always take precedence over all other work. All commits specific to security are prefixed with SECURITY.

Datei anzeigen

@ -3,6 +3,13 @@ class CustomWizard::AdminController < ::Admin::AdminController
before_action :ensure_admin before_action :ensure_admin
def index def index
subcription = CustomWizard::Subscription.new
render_json_dump(
subscribed: subcription.subscribed?,
subscription_type: subcription.type,
subscription_attributes: CustomWizard::Subscription.attributes,
subscription_client_installed: CustomWizard::Subscription.client_installed?
)
end end
private private

Datei anzeigen

@ -20,6 +20,10 @@ class CustomWizard::AdminApiController < CustomWizard::AdminController
raise Discourse::InvalidParameters, "An API with that name already exists: '#{current.title || current.name}'" raise Discourse::InvalidParameters, "An API with that name already exists: '#{current.title || current.name}'"
end end
unless subscription.includes?(:api, :all)
raise Discourse::InvalidParameters, "Your subscription doesn't include API features."
end
PluginStoreRow.transaction do PluginStoreRow.transaction do
CustomWizard::Api.set(api_params[:name], title: api_params[:title]) CustomWizard::Api.set(api_params[:name], title: api_params[:title])
@ -130,4 +134,8 @@ class CustomWizard::AdminApiController < CustomWizard::AdminController
@auth_data ||= auth_data @auth_data ||= auth_data
end end
def subscription
@subscription ||= CustomWizard::Subscription.new
end
end end

Datei anzeigen

@ -1,7 +1,9 @@
# frozen_string_literal: true # frozen_string_literal: true
class CustomWizard::AdminCustomFieldsController < CustomWizard::AdminController class CustomWizard::AdminCustomFieldsController < CustomWizard::AdminController
def index def index
render_json_dump(custom_field_list) render_json_dump(
custom_fields: custom_field_list
)
end end
def update def update

Datei anzeigen

@ -1,9 +1,44 @@
# frozen_string_literal: true # frozen_string_literal: true
class CustomWizard::AdminLogsController < CustomWizard::AdminController class CustomWizard::AdminLogsController < CustomWizard::AdminController
before_action :find_wizard, except: [:index]
def index def index
render_serialized( render json: ActiveModel::ArraySerializer.new(
CustomWizard::Log.list(params[:page].to_i, params[:limit].to_i), CustomWizard::Wizard.list(current_user),
CustomWizard::LogSerializer each_serializer: CustomWizard::BasicWizardSerializer
) )
end end
def show
render_json_dump(
wizard: CustomWizard::BasicWizardSerializer.new(@wizard, root: false),
logs: ActiveModel::ArraySerializer.new(
log_list.logs,
each_serializer: CustomWizard::LogSerializer
),
total: log_list.total
)
end
protected
def log_list
@log_list ||= begin
list = CustomWizard::Log.list(params[:page].to_i, params[:limit].to_i, params[:wizard_id])
if list.logs.any? && (usernames = list.logs.map(&:username)).present?
user_map = User.where(username: usernames)
.reduce({}) do |result, user|
result[user.username] = user
result
end
list.logs.each do |log_item|
log_item.user = user_map[log_item.username]
end
end
list
end
end
end end

Datei anzeigen

@ -13,12 +13,21 @@ class CustomWizard::AdminSubmissionsController < CustomWizard::AdminController
def show def show
render_json_dump( render_json_dump(
wizard: CustomWizard::BasicWizardSerializer.new(@wizard, root: false), wizard: CustomWizard::BasicWizardSerializer.new(@wizard, root: false),
submissions: ActiveModel::ArraySerializer.new(ordered_submissions, each_serializer: CustomWizard::SubmissionSerializer) submissions: ActiveModel::ArraySerializer.new(
submission_list.submissions,
each_serializer: CustomWizard::SubmissionSerializer
),
total: submission_list.total
) )
end end
def download def download
send_data ordered_submissions.to_json, content = ActiveModel::ArraySerializer.new(
CustomWizard::Submission.list(@wizard).submissions,
each_serializer: CustomWizard::SubmissionSerializer
)
send_data content.to_json,
filename: "#{Discourse.current_hostname}-wizard-submissions-#{@wizard.name}.json", filename: "#{Discourse.current_hostname}-wizard-submissions-#{@wizard.name}.json",
content_type: "application/json", content_type: "application/json",
disposition: "attachment" disposition: "attachment"
@ -26,7 +35,7 @@ class CustomWizard::AdminSubmissionsController < CustomWizard::AdminController
protected protected
def ordered_submissions def submission_list
CustomWizard::Submission.list(@wizard, order_by: 'id') CustomWizard::Submission.list(@wizard, page: params[:page].to_i)
end end
end end

Datei anzeigen

@ -88,6 +88,7 @@ class CustomWizard::AdminWizardController < CustomWizard::AdminController
:title, :title,
:key, :key,
:banner, :banner,
:banner_upload_id,
:raw_description, :raw_description,
:required_data_message, :required_data_message,
:force_final, :force_final,
@ -99,6 +100,7 @@ class CustomWizard::AdminWizardController < CustomWizard::AdminController
:index, :index,
:label, :label,
:image, :image,
:image_upload_id,
:description, :description,
:required, :required,
:key, :key,
@ -112,6 +114,7 @@ class CustomWizard::AdminWizardController < CustomWizard::AdminController
:property, :property,
:preview_template, :preview_template,
:placeholder, :placeholder,
:can_create_tag,
prefill: mapped_params, prefill: mapped_params,
content: mapped_params, content: mapped_params,
condition: mapped_params, condition: mapped_params,
@ -161,7 +164,9 @@ class CustomWizard::AdminWizardController < CustomWizard::AdminController
mentionable_level: mapped_params, mentionable_level: mapped_params,
messageable_level: mapped_params, messageable_level: mapped_params,
visibility_level: mapped_params, visibility_level: mapped_params,
members_visibility_level: mapped_params members_visibility_level: mapped_params,
add_event: mapped_params,
add_location: mapped_params
] ]
) )
end end

Datei anzeigen

@ -1,6 +1,5 @@
# frozen_string_literal: true # frozen_string_literal: true
class CustomWizard::StepsController < ::ApplicationController class CustomWizard::StepsController < ::CustomWizard::WizardClientController
before_action :ensure_logged_in
before_action :ensure_can_update before_action :ensure_can_update
def update def update
@ -22,7 +21,7 @@ class CustomWizard::StepsController < ::ApplicationController
if updater.success? if updater.success?
wizard_id = update_params[:wizard_id] wizard_id = update_params[:wizard_id]
builder = CustomWizard::Builder.new(wizard_id, current_user) builder = CustomWizard::Builder.new(wizard_id, current_user, guest_id)
@wizard = builder.build(force: true) @wizard = builder.build(force: true)
current_step = @wizard.find_step(update[:step_id]) current_step = @wizard.find_step(update[:step_id])
@ -85,7 +84,6 @@ class CustomWizard::StepsController < ::ApplicationController
private private
def ensure_can_update def ensure_can_update
@builder = CustomWizard::Builder.new(update_params[:wizard_id], current_user)
raise Discourse::InvalidParameters.new(:wizard_id) if @builder.template.nil? raise Discourse::InvalidParameters.new(:wizard_id) if @builder.template.nil?
raise Discourse::InvalidAccess.new if !@builder.wizard || !@builder.wizard.can_access? raise Discourse::InvalidAccess.new if !@builder.wizard || !@builder.wizard.can_access?

Datei anzeigen

@ -1,40 +1,10 @@
# frozen_string_literal: true # frozen_string_literal: true
class CustomWizard::WizardController < ::ActionController::Base class CustomWizard::WizardController < ::CustomWizard::WizardClientController
helper ApplicationHelper def show
if wizard.present?
include CurrentUser render json: CustomWizard::WizardSerializer.new(wizard, scope: guardian, root: false).as_json, status: 200
include CanonicalURL::ControllerExtensions else
include GlobalPath render json: { error: I18n.t('wizard.none') }
prepend_view_path(Rails.root.join('plugins', 'discourse-custom-wizard', 'app', 'views'))
layout :set_wizard_layout
before_action :preload_wizard_json
before_action :ensure_plugin_enabled
before_action :ensure_logged_in, only: [:skip]
around_action :with_resolved_locale
helper_method :wizard_page_title
helper_method :wizard_theme_id
helper_method :wizard_theme_lookup
helper_method :wizard_theme_translations_lookup
def set_wizard_layout
action_name === 'qunit' ? 'qunit' : 'wizard'
end
def index
respond_to do |format|
format.json do
if wizard.present?
render json: CustomWizard::WizardSerializer.new(wizard, scope: guardian, root: false).as_json, status: 200
else
render json: { error: I18n.t('wizard.none') }
end
end
format.html do
render "default/empty"
end
end end
end end
@ -58,76 +28,12 @@ class CustomWizard::WizardController < ::ActionController::Base
render json: result render json: result
end end
def qunit
raise Discourse::InvalidAccess.new if Rails.env.production?
respond_to do |format|
format.html do
render "default/empty"
end
end
end
protected protected
def ensure_logged_in
raise Discourse::NotLoggedIn.new unless current_user.present?
end
def guardian
@guardian ||= Guardian.new(current_user, request)
end
def wizard def wizard
@wizard ||= begin @wizard ||= begin
builder = CustomWizard::Builder.new(params[:wizard_id].underscore, current_user) return nil unless @builder.present?
return nil unless builder.present? @builder.build({ reset: params[:reset] }, params)
opts = {}
opts[:reset] = params[:reset]
builder.build(opts, params)
end
end
def wizard_page_title
wizard ? (wizard.name || wizard.id) : I18n.t('wizard.custom_title')
end
def wizard_theme_id
wizard ? wizard.theme_id : nil
end
def wizard_theme_lookup(name)
Theme.lookup_field(wizard_theme_id, view_context.mobile_view? ? :mobile : :desktop, name)
end
def wizard_theme_translations_lookup
Theme.lookup_field(wizard_theme_id, :translations, I18n.locale)
end
def preload_wizard_json
return if request.xhr? || request.format.json?
return if request.method != "GET"
store_preloaded("siteSettings", SiteSetting.client_settings_json)
end
def store_preloaded(key, json)
@preloaded ||= {}
@preloaded[key] = json.gsub("</", "<\\/")
end
## Simplified version of with_resolved_locale in ApplicationController
def with_resolved_locale
locale = current_user ? current_user.effective_locale : SiteSetting.default_locale
I18n.ensure_all_loaded!
I18n.with_locale(locale) { yield }
end
private
def ensure_plugin_enabled
unless SiteSetting.custom_wizard_enabled
redirect_to path("/")
end end
end end
end end

Datei anzeigen

@ -0,0 +1,23 @@
# frozen_string_literal: true
class CustomWizard::WizardClientController < ::ApplicationController
before_action :ensure_plugin_enabled
before_action :set_builder
private
def ensure_plugin_enabled
unless SiteSetting.custom_wizard_enabled
redirect_to path("/")
end
end
def guest_id
return nil if current_user.present?
cookies[:custom_wizard_guest_id] ||= CustomWizard::Wizard.generate_guest_id
cookies[:custom_wizard_guest_id]
end
def set_builder
@builder = CustomWizard::Builder.new(params[:wizard_id].underscore, current_user, guest_id)
end
end

Datei anzeigen

@ -1,4 +1,10 @@
# frozen_string_literal: true # frozen_string_literal: true
class CustomWizard::LogSerializer < ApplicationSerializer class CustomWizard::LogSerializer < ApplicationSerializer
attributes :message, :date attributes :date,
:action,
:username,
:message
has_one :user, serializer: ::BasicUserSerializer, embed: :objects
end end

Datei anzeigen

@ -1,16 +1,35 @@
# frozen_string_literal: true # frozen_string_literal: true
class CustomWizard::SubmissionSerializer < ApplicationSerializer class CustomWizard::SubmissionSerializer < ApplicationSerializer
attributes :id, attributes :id,
:username,
:fields, :fields,
:submitted_at, :submitted_at,
:route_to, :user
:redirect_on_complete,
:redirect_to
def username def include_user?
object.user.present? ? object.wizard.user.present?
object.user.username : end
I18n.t('admin.wizard.submission.no_user', user_id: object.user_id)
def user
::BasicUserSerializer.new(object.wizard.user, root: false).as_json
end
def fields
@fields ||= begin
result = {}
object.wizard.template['steps'].each do |step|
step['fields'].each do |field|
if value = object.fields[field['id']]
result[field['id']] = {
value: value,
type: field['type'],
label: field['label']
}
end
end
end
result
end
end end
end end

Datei anzeigen

@ -17,6 +17,7 @@ class CustomWizard::FieldSerializer < ::ApplicationSerializer
:property, :property,
:content, :content,
:tag_groups, :tag_groups,
:can_create_tag,
:validations, :validations,
:max_length, :max_length,
:char_counter, :char_counter,
@ -42,13 +43,8 @@ class CustomWizard::FieldSerializer < ::ApplicationSerializer
object.value object.value
end end
def i18n_key
@i18n_key ||= "wizard.step.#{object.step.id}.fields.#{object.id}".underscore
end
def label def label
return object.label if object.label.present? I18n.t("#{i18n_key}.label", default: object.label, base_url: Discourse.base_url)
I18n.t("#{object.key || i18n_key}.label", default: '')
end end
def include_label? def include_label?
@ -56,14 +52,21 @@ class CustomWizard::FieldSerializer < ::ApplicationSerializer
end end
def description def description
return object.description if object.description.present? I18n.t("#{i18n_key}.description", default: object.description, base_url: Discourse.base_url)
I18n.t("#{object.key || i18n_key}.description", default: '', base_url: Discourse.base_url)
end end
def include_description? def include_description?
description.present? description.present?
end end
def placeholder
I18n.t("#{i18n_key}.placeholder", default: object.placeholder)
end
def include_placeholder?
placeholder.present?
end
def image def image
object.image object.image
end end
@ -72,15 +75,6 @@ class CustomWizard::FieldSerializer < ::ApplicationSerializer
object.image.present? object.image.present?
end end
def placeholder
return object.placeholder if object.placeholder.present?
I18n.t("#{object.key || i18n_key}.placeholder", default: '')
end
def include_placeholder?
placeholder.present?
end
def file_types def file_types
object.file_types object.file_types
end end
@ -105,6 +99,10 @@ class CustomWizard::FieldSerializer < ::ApplicationSerializer
object.tag_groups object.tag_groups
end end
def can_create_tag
object.can_create_tag
end
def validations def validations
validations = {} validations = {}
object.validations&.each do |type, props| object.validations&.each do |type, props|
@ -127,4 +125,14 @@ class CustomWizard::FieldSerializer < ::ApplicationSerializer
def preview_template def preview_template
object.preview_template object.preview_template
end end
protected
def i18n_key
@i18n_key ||= "#{object.step.wizard.id}.#{object.step.id}.#{object.id}".underscore
end
def subscribed?
@subscribed ||= CustomWizard::Subscription.subscribed?
end
end end

Datei anzeigen

@ -9,13 +9,10 @@ class CustomWizard::WizardSerializer < CustomWizard::BasicWizardSerializer
:completed, :completed,
:required, :required,
:permitted, :permitted,
:uncategorized_category_id,
:categories,
:resume_on_revisit :resume_on_revisit
has_many :steps, serializer: ::CustomWizard::StepSerializer, embed: :objects has_many :steps, serializer: ::CustomWizard::StepSerializer, embed: :objects
has_one :user, serializer: ::BasicUserSerializer, embed: :objects has_one :user, serializer: ::BasicUserSerializer, embed: :objects
has_many :groups, serializer: ::BasicGroupSerializer, embed: :objects
def completed def completed
object.completed? object.completed?
@ -46,24 +43,4 @@ class CustomWizard::WizardSerializer < CustomWizard::BasicWizardSerializer
def include_steps? def include_steps?
!include_completed? !include_completed?
end end
def include_categories?
object.needs_categories
end
def include_groups?
object.needs_groups
end
def uncategorized_category_id
SiteSetting.uncategorized_category_id
end
def include_uncategorized_category_id?
object.needs_categories
end
def categories
object.categories.map { |c| c.to_h }
end
end end

Datei anzeigen

@ -39,13 +39,8 @@ class CustomWizard::StepSerializer < ::ApplicationSerializer
object.previous.present? object.previous.present?
end end
def i18n_key
@i18n_key ||= "wizard.step.#{object.id}".underscore
end
def title def title
return PrettyText.cook(object.title) if object.title I18n.t("#{i18n_key}.title", default: object.title, base_url: Discourse.base_url)
PrettyText.cook(I18n.t("#{object.key || i18n_key}.title", default: ''))
end end
def include_title? def include_title?
@ -53,8 +48,7 @@ class CustomWizard::StepSerializer < ::ApplicationSerializer
end end
def description def description
return object.description if object.description I18n.t("#{i18n_key}.description", default: object.description, base_url: Discourse.base_url)
PrettyText.cook(I18n.t("#{object.key || i18n_key}.description", default: '', base_url: Discourse.base_url))
end end
def include_description? def include_description?
@ -80,4 +74,10 @@ class CustomWizard::StepSerializer < ::ApplicationSerializer
def final def final
object.final? object.final?
end end
protected
def i18n_key
@i18n_key ||= "#{object.wizard.id}.#{object.id}".underscore
end
end end

Datei anzeigen

@ -0,0 +1,28 @@
<!DOCTYPE html>
<html>
<head>
<title>Custom Wizard QUnit Test Runner</title>
<%= discourse_stylesheet_link_tag(:test_helper, theme_id: nil) %>
<%= discourse_stylesheet_link_tag :wizard, theme_id: nil %>
<%= discourse_stylesheet_link_tag :wizard_custom %>
<%= preload_script "locales/en" %>
<%= preload_script "ember_jquery" %>
<%= preload_script "wizard-vendor" %>
<%= preload_script "wizard-custom" %>
<%= preload_script "wizard-raw-templates" %>
<%= preload_script "wizard-plugin" %>
<%= preload_script "pretty-text-bundle" %>
<%= preload_script "wizard-qunit" %>
<%= csrf_meta_tags %>
<script src="<%= ExtraLocalesController.url("wizard") %>"></script>
<%= tag.meta id: 'data-discourse-setup', data: client_side_setup_data %>
<meta name="discourse_theme_id" content="">
<meta name="discourse-base-uri" content="<%= Discourse.base_path %>">
</head>
<body class="custom-wizard">
<div id="qunit"></div>
<div id="qunit-fixture"></div>
</body>
</html>

Datei anzeigen

@ -1,62 +0,0 @@
<html>
<head>
<%= discourse_color_scheme_stylesheets %>
<%= discourse_stylesheet_link_tag :wizard, theme_id: nil %>
<%= discourse_stylesheet_link_tag :wizard_custom %>
<%- if wizard_theme_id.present? %>
<%= discourse_stylesheet_link_tag (mobile_view? ? :mobile_theme : :desktop_theme), theme_id: wizard_theme_id %>
<%- end %>
<%= preload_script "locales/#{I18n.locale}" %>
<%= preload_script "ember_jquery" %>
<%= preload_script "wizard-vendor" %>
<%= preload_script "wizard-custom" %>
<%= preload_script "wizard-raw-templates" %>
<%= preload_script "wizard-plugin" %>
<%= preload_script "pretty-text-bundle" %>
<%= preload_script_url ExtraLocalesController.url("wizard") %>
<%= csrf_meta_tags %>
<%- unless customization_disabled? %>
<%= wizard_theme_translations_lookup %>
<%= raw wizard_theme_lookup("head_tag") %>
<%- end %>
<%= server_plugin_outlet "custom_wizard" %>
<%= tag.meta id: 'data-discourse-setup', data: client_side_setup_data %>
<meta name="discourse_theme_id" content="<%= wizard_theme_id %>">
<meta name="discourse-base-uri" content="<%= Discourse.base_path %>">
<%= render partial: "layouts/head" %>
<title><%= wizard_page_title %></title>
</head>
<body class='custom-wizard wizard'>
<%- unless customization_disabled? %>
<%= raw wizard_theme_lookup("header") %>
<%- end %>
<div id='custom-wizard-main'></div>
<%- unless customization_disabled? %>
<%= raw wizard_theme_lookup("body_tag") %>
<%- end %>
<%- if current_user %>
<%= preload_script 'wizard-custom-start' %>
<%- else %>
<%= preload_script 'wizard-custom-guest' %>
<%- end %>
<div id="svg-sprites" style="display:none;">
<div class="fontawesome">
<%= raw SvgSprite.bundle %>
</div>
</div>
<div class="hidden" id="data-preloaded-wizard" data-preloaded-wizard="<%= preloaded_json %>"></div>
</body>
</html>

Datei anzeigen

@ -3,27 +3,12 @@ import discourseComputed, { observes } from "discourse-common/utils/decorators";
import { alias, equal, or } from "@ember/object/computed"; import { alias, equal, or } from "@ember/object/computed";
import I18n from "I18n"; import I18n from "I18n";
const generateContent = function (array, type) {
return array.map((key) => ({
id: key,
name: I18n.t(`admin.wizard.custom_field.${type}.${key}`),
}));
};
export default Component.extend({ export default Component.extend({
tagName: "tr", tagName: "tr",
topicSerializers: ["topic_view", "topic_list_item"], topicSerializers: ["topic_view", "topic_list_item"],
postSerializers: ["post"], postSerializers: ["post"],
groupSerializers: ["basic_group"], groupSerializers: ["basic_group"],
categorySerializers: ["basic_category"], categorySerializers: ["basic_category"],
klassContent: generateContent(
["topic", "post", "group", "category"],
"klass"
),
typeContent: generateContent(
["string", "boolean", "integer", "json"],
"type"
),
showInputs: or("field.new", "field.edit"), showInputs: or("field.new", "field.edit"),
classNames: ["custom-field-input"], classNames: ["custom-field-input"],
loading: or("saving", "destroying"), loading: or("saving", "destroying"),
@ -40,9 +25,13 @@ export default Component.extend({
const serializers = this.get(`${klass}Serializers`); const serializers = this.get(`${klass}Serializers`);
if (serializers) { if (serializers) {
return generateContent(serializers, "serializers"); return serializers.reduce((result, key) => {
} else { result.push({
return []; id: key,
name: I18n.t(`admin.wizard.custom_field.serializers.${key}`),
});
return result;
}, []);
} }
}, },

Datei anzeigen

@ -3,11 +3,11 @@ import {
observes, observes,
} from "discourse-common/utils/decorators"; } from "discourse-common/utils/decorators";
import { renderAvatar } from "discourse/helpers/user-avatar"; import { renderAvatar } from "discourse/helpers/user-avatar";
import userSearch from "../lib/user-search"; import userSearch from "discourse/lib/user-search";
import WizardI18n from "../lib/wizard-i18n"; import I18n from "I18n";
import Handlebars from "handlebars"; import Handlebars from "handlebars";
import { isEmpty } from "@ember/utils"; import { isEmpty } from "@ember/utils";
import TextField from "@ember/component/text-field"; import TextField from "discourse/components/text-field";
const template = function (params) { const template = function (params) {
const options = params.options; const options = params.options;
@ -41,7 +41,7 @@ export default TextField.extend({
@computed("placeholderKey") @computed("placeholderKey")
placeholder(placeholderKey) { placeholder(placeholderKey) {
return placeholderKey ? WizardI18n(placeholderKey) : ""; return placeholderKey ? I18n.t(placeholderKey) : "";
}, },
@observes("usernames") @observes("usernames")

Datei anzeigen

@ -1,23 +1,29 @@
import ComposerEditor from "discourse/components/composer-editor"; import ComposerEditor from "discourse/components/composer-editor";
import { import {
bind,
default as discourseComputed, default as discourseComputed,
on, on,
} from "discourse-common/utils/decorators"; } from "discourse-common/utils/decorators";
import { findRawTemplate } from "discourse/plugins/discourse-custom-wizard/legacy/raw-templates"; import { findRawTemplate } from "discourse-common/lib/raw-templates";
import { scheduleOnce } from "@ember/runloop"; import { scheduleOnce } from "@ember/runloop";
import { caretPosition, inCodeBlock } from "discourse/lib/utilities"; import { caretPosition, inCodeBlock } from "discourse/lib/utilities";
import highlightSyntax from "discourse/lib/highlight-syntax"; import highlightSyntax from "discourse/lib/highlight-syntax";
import { alias } from "@ember/object/computed"; import { alias } from "@ember/object/computed";
import Site from "../models/site"; import Site from "discourse/models/site";
import { uploadIcon } from "discourse/lib/uploads"; import { uploadIcon } from "discourse/lib/uploads";
import { dasherize } from "@ember/string"; import { dasherize } from "@ember/string";
import InsertHyperlink from "discourse/components/modal/insert-hyperlink";
import { inject as service } from "@ember/service";
const IMAGE_MARKDOWN_REGEX =
/!\[(.*?)\|(\d{1,4}x\d{1,4})(,\s*\d{1,3}%)?(.*?)\]\((upload:\/\/.*?)\)(?!(.*`))/g;
export default ComposerEditor.extend({ export default ComposerEditor.extend({
layoutName: "wizard/templates/components/wizard-composer-editor", modal: service(),
classNameBindings: ["fieldClass"], classNameBindings: ["fieldClass"],
allowUpload: true, allowUpload: true,
showLink: false, showLink: false,
showHyperlinkBox: false,
topic: null, topic: null,
showToolbar: true, showToolbar: true,
focusTarget: "reply", focusTarget: "reply",
@ -26,7 +32,8 @@ export default ComposerEditor.extend({
popupMenuOptions: [], popupMenuOptions: [],
draftStatus: "null", draftStatus: "null",
replyPlaceholder: alias("field.translatedPlaceholder"), replyPlaceholder: alias("field.translatedPlaceholder"),
uploadingFieldId: null, wizardEventFieldId: null,
composerEventPrefix: "wizard-editor",
@on("didInsertElement") @on("didInsertElement")
_composerEditorInit() { _composerEditorInit() {
@ -35,7 +42,7 @@ export default ComposerEditor.extend({
if (this.siteSettings.enable_mentions) { if (this.siteSettings.enable_mentions) {
$input.autocomplete({ $input.autocomplete({
template: findRawTemplate("user-selector-autocomplete"), template: findRawTemplate("user-selector-autocomplete"),
dataSource: (term) => this.userSearchTerm.call(this, term), dataSource: (term) => this._userSearchTerm.call(this, term),
key: "@", key: "@",
transformComplete: (v) => v.username || v.name, transformComplete: (v) => v.username || v.name,
afterComplete: (value) => { afterComplete: (value) => {
@ -75,43 +82,13 @@ export default ComposerEditor.extend({
$input.on("scroll", this._throttledSyncEditorAndPreviewScroll); $input.on("scroll", this._throttledSyncEditorAndPreviewScroll);
this._bindUploadTarget(); this._bindUploadTarget();
const wizardEventNames = ["insert-text", "replace-text"]; const field = this.field;
const eventPrefix = this.eventPrefix; this.editorInputClass = `.${dasherize(field.type)}-${dasherize(
const session = this.get("session"); field.id
this.appEvents.reopen({ )} .d-editor-input`;
trigger(name, ...args) {
let eventParts = name.split(":");
let currentEventPrefix = eventParts[0];
let currentEventName = eventParts[1];
if ( this._uppyInstance.on("file-added", () => {
currentEventPrefix !== "wizard-editor" && this.session.set("wizardEventFieldId", field.id);
wizardEventNames.some((wen) => wen === currentEventName)
) {
let wizardName = name.replace(eventPrefix, "wizard-editor");
if (currentEventName === "insert-text") {
args = {
text: args[0],
};
}
if (currentEventName === "replace-text") {
args = {
oldVal: args[0],
newVal: args[1],
};
}
let wizardArgs = Object.assign(
{},
{
fieldId: session.get("uploadingFieldId"),
},
args
);
return this._super(wizardName, wizardArgs);
} else {
return this._super(name, ...args);
}
},
}); });
}, },
@ -133,17 +110,33 @@ export default ComposerEditor.extend({
return uploadIcon(false, this.siteSettings); return uploadIcon(false, this.siteSettings);
}, },
click(e) { @bind
if ($(e.target).hasClass("wizard-composer-hyperlink")) { _handleImageDeleteButtonClick(event) {
this.set("showHyperlinkBox", false); if (!event.target.classList.contains("delete-image-button")) {
return;
} }
const index = parseInt(
event.target.closest(".button-wrapper").dataset.imageIndex,
10
);
const matchingPlaceholder =
this.get("composer.reply").match(IMAGE_MARKDOWN_REGEX);
this.session.set("wizardEventFieldId", this.field.id);
this.appEvents.trigger(
"composer:replace-text",
matchingPlaceholder[index],
"",
{ regex: IMAGE_MARKDOWN_REGEX, index }
);
}, },
actions: { actions: {
extraButtons(toolbar) { extraButtons(toolbar) {
const component = this; const component = this;
if (this.allowUpload && this.uploadIcon && !this.site.mobileView) { if (this.allowUpload && this.uploadIcon) {
toolbar.addButton({ toolbar.addButton({
id: "upload", id: "upload",
group: "insertions", group: "insertions",
@ -159,7 +152,7 @@ export default ComposerEditor.extend({
shortcut: "K", shortcut: "K",
trimLeading: true, trimLeading: true,
unshift: true, unshift: true,
sendAction: () => component.set("showHyperlinkBox", true), sendAction: (event) => component.send("showLinkModal", event),
}); });
if (this.siteSettings.mentionables_enabled) { if (this.siteSettings.mentionables_enabled) {
@ -188,33 +181,32 @@ export default ComposerEditor.extend({
} }
}, },
previewUpdated($preview) { previewUpdated(preview) {
highlightSyntax($preview[0], this.siteSettings, this.session); highlightSyntax(preview, this.siteSettings, this.session);
if (this.siteSettings.mentionables_enabled) { if (this.siteSettings.mentionables_enabled) {
const { linkSeenMentionableItems } = requirejs( const { linkSeenMentionableItems } = requirejs(
"discourse/plugins/discourse-mentionables/discourse/lib/mentionable-items-preview-styling" "discourse/plugins/discourse-mentionables/discourse/lib/mentionable-items-preview-styling"
); );
linkSeenMentionableItems($preview, this.siteSettings); linkSeenMentionableItems(preview, this.siteSettings);
} }
this._super(...arguments); this._super(...arguments);
}, },
addLink(linkName, linkUrl) { showLinkModal(toolbarEvent) {
let link = `[${linkName}](${linkUrl})`; let linkText = "";
this.appEvents.trigger("wizard-editor:insert-text", { this._lastSel = toolbarEvent.selected;
fieldId: this.field.id,
text: link,
});
this.set("showHyperlinkBox", false);
},
hideBox() { if (this._lastSel) {
this.set("showHyperlinkBox", false); linkText = this._lastSel.value;
}
this.modal.show(InsertHyperlink, {
model: { linkText, toolbarEvent },
});
}, },
showUploadModal() { showUploadModal() {
this.session.set("uploadingFieldId", this.field.id); this.session.set("wizardEventFieldId", this.field.id);
document.getElementById(this.fileUploadElementId).click(); document.getElementById(this.fileUploadElementId).click();
}, },
}, },

Datei anzeigen

@ -3,7 +3,7 @@ import discourseComputed from "discourse-common/utils/decorators";
export default DateInput.extend({ export default DateInput.extend({
useNativePicker: false, useNativePicker: false,
layoutName: "wizard/templates/components/wizard-date-input", classNameBindings: ["fieldClass"],
@discourseComputed() @discourseComputed()
placeholder() { placeholder() {

Datei anzeigen

@ -2,7 +2,7 @@ import DateTimeInput from "discourse/components/date-time-input";
import discourseComputed from "discourse-common/utils/decorators"; import discourseComputed from "discourse-common/utils/decorators";
export default DateTimeInput.extend({ export default DateTimeInput.extend({
layoutName: "wizard/templates/components/wizard-date-time-input", classNameBindings: ["fieldClass"],
@discourseComputed("timeFirst", "tabindex") @discourseComputed("timeFirst", "tabindex")
timeTabindex(timeFirst, tabindex) { timeTabindex(timeFirst, tabindex) {

Datei anzeigen

@ -3,8 +3,6 @@ import Category from "discourse/models/category";
import Component from "@ember/component"; import Component from "@ember/component";
export default Component.extend({ export default Component.extend({
layoutName: "wizard/templates/components/wizard-field-category",
didInsertElement() { didInsertElement() {
const property = this.field.property || "id"; const property = this.field.property || "id";
const value = this.field.value; const value = this.field.value;

Datei anzeigen

@ -0,0 +1,3 @@
import Component from "@ember/component";
export default Component.extend({});

Datei anzeigen

@ -7,8 +7,6 @@ import { ajax } from "discourse/lib/ajax";
import { on } from "discourse-common/utils/decorators"; import { on } from "discourse-common/utils/decorators";
export default Component.extend({ export default Component.extend({
layoutName: "wizard/templates/components/wizard-field-composer-preview",
@on("init") @on("init")
updatePreview() { updatePreview() {
if (this.isDestroyed) { if (this.isDestroyed) {

Datei anzeigen

@ -6,8 +6,6 @@ import EmberObject from "@ember/object";
import Component from "@ember/component"; import Component from "@ember/component";
export default Component.extend({ export default Component.extend({
layoutName: "wizard/templates/components/wizard-field-composer",
showPreview: false, showPreview: false,
classNameBindings: [ classNameBindings: [
":wizard-field-composer", ":wizard-field-composer",

Datei anzeigen

@ -2,8 +2,6 @@ import Component from "@ember/component";
import { observes } from "discourse-common/utils/decorators"; import { observes } from "discourse-common/utils/decorators";
export default Component.extend({ export default Component.extend({
layoutName: "wizard/templates/components/wizard-field-date-time",
@observes("dateTime") @observes("dateTime")
setValue() { setValue() {
this.set("field.value", this.dateTime.format(this.field.format)); this.set("field.value", this.dateTime.format(this.field.format));

Datei anzeigen

@ -2,8 +2,6 @@ import Component from "@ember/component";
import { observes } from "discourse-common/utils/decorators"; import { observes } from "discourse-common/utils/decorators";
export default Component.extend({ export default Component.extend({
layoutName: "wizard/templates/components/wizard-field-date",
@observes("date") @observes("date")
setValue() { setValue() {
this.set("field.value", this.date.format(this.field.format)); this.set("field.value", this.date.format(this.field.format));

Datei anzeigen

@ -1,8 +1,6 @@
import Component from "@ember/component"; import Component from "@ember/component";
export default Component.extend({ export default Component.extend({
layoutName: "wizard/templates/components/wizard-field-dropdown",
keyPress(e) { keyPress(e) {
e.stopPropagation(); e.stopPropagation();
}, },

Datei anzeigen

@ -0,0 +1,3 @@
import Component from "@ember/component";
export default Component.extend({});

Datei anzeigen

@ -0,0 +1,3 @@
import Component from "@ember/component";
export default Component.extend({});

Datei anzeigen

@ -0,0 +1,3 @@
import Component from "@ember/component";
export default Component.extend({});

Datei anzeigen

@ -1,8 +1,6 @@
import Component from "@ember/component"; import Component from "@ember/component";
export default Component.extend({ export default Component.extend({
layoutName: "wizard/templates/components/wizard-field-text",
keyPress(e) { keyPress(e) {
e.stopPropagation(); e.stopPropagation();
}, },

Datei anzeigen

@ -1,8 +1,6 @@
import Component from "@ember/component"; import Component from "@ember/component";
export default Component.extend({ export default Component.extend({
layoutName: "wizard/templates/components/wizard-field-textarea",
keyPress(e) { keyPress(e) {
e.stopPropagation(); e.stopPropagation();
}, },

Datei anzeigen

@ -2,7 +2,7 @@ import Component from "@ember/component";
import { observes } from "discourse-common/utils/decorators"; import { observes } from "discourse-common/utils/decorators";
export default Component.extend({ export default Component.extend({
layoutName: "wizard/templates/components/wizard-field-time", classNameBindings: ["fieldClass"],
@observes("time") @observes("time")
setValue() { setValue() {

Datei anzeigen

@ -3,9 +3,8 @@ import Component from "@ember/component";
import { computed } from "@ember/object"; import { computed } from "@ember/object";
export default Component.extend(UppyUploadMixin, { export default Component.extend(UppyUploadMixin, {
layoutName: "wizard/templates/components/wizard-field-upload",
classNames: ["wizard-field-upload"], classNames: ["wizard-field-upload"],
classNameBindings: ["isImage"], classNameBindings: ["isImage", "fieldClass"],
uploading: false, uploading: false,
type: computed(function () { type: computed(function () {
return `wizard_${this.field.id}`; return `wizard_${this.field.id}`;

Datei anzeigen

@ -0,0 +1,3 @@
import Component from "@ember/component";
export default Component.extend({});

Datei anzeigen

@ -1,5 +1,5 @@
import Component from "@ember/component"; import Component from "@ember/component";
export default Component.extend({ export default Component.extend({
layoutName: "wizard/templates/components/wizard-field-tag", classNameBindings: ["fieldClass"],
}); });

Datei anzeigen

@ -1,10 +1,9 @@
import Component from "@ember/component"; import Component from "@ember/component";
import { dasherize } from "@ember/string"; import { dasherize } from "@ember/string";
import discourseComputed from "discourse-common/utils/decorators"; import discourseComputed from "discourse-common/utils/decorators";
import { cook } from "discourse/plugins/discourse-custom-wizard/wizard/lib/text-lite"; import { cookAsync } from "discourse/lib/text";
export default Component.extend({ export default Component.extend({
layoutName: "wizard/templates/components/wizard-field",
classNameBindings: [ classNameBindings: [
":wizard-field", ":wizard-field",
"typeClasses", "typeClasses",
@ -12,6 +11,14 @@ export default Component.extend({
"field.id", "field.id",
], ],
didReceiveAttrs() {
this._super(...arguments);
cookAsync(this.field.translatedDescription).then((cookedDescription) => {
this.set("cookedDescription", cookedDescription);
});
},
@discourseComputed("field.type", "field.id") @discourseComputed("field.type", "field.id")
typeClasses: (type, id) => typeClasses: (type, id) =>
`${dasherize(type)}-field ${dasherize(type)}-${dasherize(id)}`, `${dasherize(type)}-field ${dasherize(type)}-${dasherize(id)}`,
@ -24,12 +31,7 @@ export default Component.extend({
if (["text_only"].includes(type)) { if (["text_only"].includes(type)) {
return false; return false;
} }
return dasherize(type === "component" ? id : `wizard-field-${type}`); return dasherize(type === "component" ? id : `custom-wizard-field-${type}`);
},
@discourseComputed("field.translatedDescription")
cookedDescription(description) {
return cook(description);
}, },
@discourseComputed("field.type") @discourseComputed("field.type")

Datei anzeigen

@ -3,7 +3,6 @@ import { computed } from "@ember/object";
import { makeArray } from "discourse-common/lib/helpers"; import { makeArray } from "discourse-common/lib/helpers";
export default ComboBox.extend({ export default ComboBox.extend({
layoutName: "wizard/templates/components/wizard-group-selector",
content: computed("groups.[]", "field.content.[]", function () { content: computed("groups.[]", "field.content.[]", function () {
const whitelist = makeArray(this.field.content); const whitelist = makeArray(this.field.content);
return this.groups return this.groups

Datei anzeigen

@ -1,11 +1,11 @@
import CustomWizard from "../models/wizard"; import CustomWizard from "../models/custom-wizard";
import discourseComputed from "discourse-common/utils/decorators"; import discourseComputed from "discourse-common/utils/decorators";
import Component from "@ember/component"; import Component from "@ember/component";
import { dasherize } from "@ember/string"; import { dasherize } from "@ember/string";
import getURL from "discourse-common/lib/get-url";
export default Component.extend({ export default Component.extend({
classNameBindings: [":wizard-no-access", "reasonClass"], classNameBindings: [":wizard-no-access", "reasonClass"],
layoutName: "wizard/templates/components/wizard-no-access",
@discourseComputed("reason") @discourseComputed("reason")
reasonClass(reason) { reasonClass(reason) {
@ -19,7 +19,11 @@ export default Component.extend({
actions: { actions: {
skip() { skip() {
CustomWizard.skip(this.get("wizardId")); if (this.currentUser) {
CustomWizard.skip(this.get("wizardId"));
} else {
window.location = getURL("/");
}
}, },
}, },
}); });

Datei anzeigen

@ -4,7 +4,6 @@ import { observes } from "discourse-common/utils/decorators";
export default Component.extend({ export default Component.extend({
classNames: ["wizard-similar-topics"], classNames: ["wizard-similar-topics"],
layoutName: "wizard/templates/components/wizard-similar-topics",
showTopics: true, showTopics: true,
didInsertElement() { didInsertElement() {

Datei anzeigen

@ -4,15 +4,16 @@ import I18n from "I18n";
import getUrl from "discourse-common/lib/get-url"; import getUrl from "discourse-common/lib/get-url";
import { htmlSafe } from "@ember/template"; import { htmlSafe } from "@ember/template";
import { schedule } from "@ember/runloop"; import { schedule } from "@ember/runloop";
import { cook } from "discourse/plugins/discourse-custom-wizard/wizard/lib/text-lite"; import { cookAsync } from "discourse/lib/text";
import { updateCachedWizard } from "discourse/plugins/discourse-custom-wizard/wizard/models/wizard"; import CustomWizard, {
updateCachedWizard,
} from "discourse/plugins/discourse-custom-wizard/discourse/models/custom-wizard";
import { alias, not } from "@ember/object/computed"; import { alias, not } from "@ember/object/computed";
import CustomWizard from "../models/wizard"; import discourseLater from "discourse-common/lib/later";
const alreadyWarned = {}; const alreadyWarned = {};
export default Component.extend({ export default Component.extend({
layoutName: "wizard/templates/components/wizard-step",
classNameBindings: [":wizard-step", "step.id"], classNameBindings: [":wizard-step", "step.id"],
saving: null, saving: null,
@ -21,6 +22,17 @@ export default Component.extend({
this.set("stylingDropdown", {}); this.set("stylingDropdown", {});
}, },
didReceiveAttrs() {
this._super(...arguments);
cookAsync(this.step.translatedTitle).then((cookedTitle) => {
this.set("cookedTitle", cookedTitle);
});
cookAsync(this.step.translatedDescription).then((cookedDescription) => {
this.set("cookedDescription", cookedDescription);
});
},
didInsertElement() { didInsertElement() {
this._super(...arguments); this._super(...arguments);
this.autoFocus(); this.autoFocus();
@ -32,16 +44,6 @@ export default Component.extend({
showNextButton: not("step.final"), showNextButton: not("step.final"),
showDoneButton: alias("step.final"), showDoneButton: alias("step.final"),
@discourseComputed("step.translatedTitle")
cookedTitle(title) {
return cook(title);
},
@discourseComputed("step.translatedDescription")
cookedDescription(description) {
return cook(description);
},
@discourseComputed( @discourseComputed(
"step.index", "step.index",
"step.displayIndex", "step.displayIndex",
@ -109,34 +111,24 @@ export default Component.extend({
}, },
autoFocus() { autoFocus() {
schedule("afterRender", () => { discourseLater(() => {
const $invalid = $( schedule("afterRender", () => {
".wizard-field.invalid:nth-of-type(1) .wizard-focusable" if ($(".invalid .wizard-focusable").length) {
); this.animateInvalidFields();
}
if ($invalid.length) { });
return $invalid.focus();
}
$(".wizard-focusable:first").focus();
}); });
}, },
animateInvalidFields() { animateInvalidFields() {
schedule("afterRender", () => { schedule("afterRender", () => {
let $element = $( let $invalid = $(".invalid .wizard-focusable");
".invalid input[type=text],.invalid textarea,.invalid input[type=checkbox],.invalid .select-kit" if ($invalid.length) {
);
if ($element.length) {
$([document.documentElement, document.body]).animate( $([document.documentElement, document.body]).animate(
{ {
scrollTop: $element.offset().top - 200, scrollTop: $invalid.offset().top - 200,
}, },
400, 400
function () {
$element.wiggle(2, 100);
}
); );
} }
}); });

Datei anzeigen

@ -4,7 +4,10 @@ export default TagChooser.extend({
searchTags(url, data, callback) { searchTags(url, data, callback) {
if (this.tagGroups) { if (this.tagGroups) {
let tagGroupsString = this.tagGroups.join(","); let tagGroupsString = this.tagGroups.join(",");
data.tag_groups = tagGroupsString; data.filterForInput = {
name: "custom-wizard-tag-chooser",
groups: tagGroupsString,
};
} }
return this._super(url, data, callback); return this._super(url, data, callback);

Datei anzeigen

@ -1,7 +1,7 @@
import computed from "discourse-common/utils/decorators"; import computed from "discourse-common/utils/decorators";
import { isLTR, isRTL, siteDir } from "discourse/lib/text-direction"; import { isLTR, isRTL, siteDir } from "discourse/lib/text-direction";
import WizardI18n from "../lib/wizard-i18n"; import I18n from "I18n";
import TextField from "@ember/component/text-field"; import TextField from "discourse/components/text-field";
export default TextField.extend({ export default TextField.extend({
attributeBindings: [ attributeBindings: [
@ -39,6 +39,6 @@ export default TextField.extend({
@computed("placeholderKey") @computed("placeholderKey")
placeholder(placeholderKey) { placeholder(placeholderKey) {
return placeholderKey ? WizardI18n(placeholderKey) : ""; return placeholderKey ? I18n.t(placeholderKey) : "";
}, },
}); });

Datei anzeigen

@ -0,0 +1,3 @@
import TimeInput from "discourse/components/time-input";
export default TimeInput.extend({});

Datei anzeigen

@ -1,8 +1,6 @@
import Component from "@ember/component"; import Component from "@ember/component";
export default Component.extend({ export default Component.extend({
layoutName: "wizard/templates/components/field-validators",
actions: { actions: {
perform() { perform() {
this.appEvents.trigger("custom-wizard:validate"); this.appEvents.trigger("custom-wizard:validate");

Datei anzeigen

@ -0,0 +1,34 @@
<DModal @closeModal={{@closeModal}} @title={{this.title}}>
{{#if loading}}
<LoadingSpinner size="large" />
{{else}}
<div class="edit-directory-columns-container">
{{#each @model.columns as |column|}}
<div class="edit-directory-column">
<div class="left-content">
<label class="column-name">
<Input @type="checkbox" @checked={{column.enabled}} />
{{directory-table-header-title
field=column.label
translated=true
}}
</label>
</div>
</div>
{{/each}}
</div>
{{/if}}
<div class="modal-footer">
<DButton
class="btn-primary"
@label="directory.edit_columns.save"
@action={{action "save"}}
/>
<DButton
class="btn-secondary reset-to-default"
@label="directory.edit_columns.reset_to_default"
@action={{action "resetToDefault"}}
/>
</div>
</DModal>

Datei anzeigen

@ -0,0 +1,15 @@
import Component from "@glimmer/component";
import { action } from "@ember/object";
import I18n from "I18n";
export default class AdminWizardsColumnComponent extends Component {
title = I18n.t("admin.wizard.edit_columns");
@action save() {
this.args.closeModal();
}
@action resetToDefault() {
this.args.model.reset();
}
}

Datei anzeigen

@ -0,0 +1,20 @@
<DModal
@closeModal={{@closeModal}}
class="next-session-time-modal"
@title={{this.title}}
>
<DateTimeInput
@date={{this.bufferedDateTime}}
@onChange={{action "dateTimeChanged"}}
@showTime="true"
@clearable="true"
/>
<div class="modal-footer">
<DButton
@action={{action "submit"}}
class="btn-primary"
@label="admin.wizard.after_time_modal.done"
@disabled={{this.submitDisabled}}
/>
</div>
</DModal>

Datei anzeigen

@ -0,0 +1,30 @@
import Component from "@glimmer/component";
import { tracked } from "@glimmer/tracking";
import { action } from "@ember/object";
import I18n from "I18n";
export default class NextSessionScheduledComponent extends Component {
@tracked bufferedDateTime;
title = I18n.t("admin.wizard.after_time_modal.title");
constructor() {
super(...arguments);
this.bufferedDateTime = this.args.model.dateTime
? moment(this.args.model.dateTime)
: moment(Date.now());
}
get submitDisabled() {
return moment().isAfter(this.bufferedDateTime);
}
@action submit() {
const dateTime = this.bufferedDateTime;
this.args.model.update(moment(dateTime).utc().toISOString());
this.args.closeModal();
}
@action dateTimeChanged(dateTime) {
this.bufferedDateTime = dateTime;
}
}

Datei anzeigen

@ -1,4 +1,4 @@
import WizardFieldValidator from "../../wizard/components/validator"; import WizardFieldValidator from "discourse/plugins/discourse-custom-wizard/discourse/components/validator";
import { deepMerge } from "discourse-common/lib/object"; import { deepMerge } from "discourse-common/lib/object";
import discourseComputed, { observes } from "discourse-common/utils/decorators"; import discourseComputed, { observes } from "discourse-common/utils/decorators";
import { cancel, later } from "@ember/runloop"; import { cancel, later } from "@ember/runloop";
@ -10,7 +10,6 @@ import { dasherize } from "@ember/string";
export default WizardFieldValidator.extend({ export default WizardFieldValidator.extend({
classNames: ["similar-topics-validator"], classNames: ["similar-topics-validator"],
layoutName: "wizard/templates/components/similar-topics-validator",
similarTopics: null, similarTopics: null,
hasInput: notEmpty("field.value"), hasInput: notEmpty("field.value"),
hasSimilarTopics: notEmpty("similarTopics"), hasSimilarTopics: notEmpty("similarTopics"),

Datei anzeigen

@ -1,12 +1,10 @@
import Component from "@ember/component"; import Component from "@ember/component";
import { equal } from "@ember/object/computed"; import { equal } from "@ember/object/computed";
import { ajax } from "discourse/lib/ajax"; import { ajax, getToken } from "discourse/lib/ajax";
import { getToken } from "../lib/ajax";
export default Component.extend({ export default Component.extend({
classNames: ["validator"], classNames: ["validator"],
classNameBindings: ["isValid", "isInvalid"], classNameBindings: ["isValid", "isInvalid"],
layoutName: "wizard/templates/components/validator",
validMessageKey: null, validMessageKey: null,
invalidMessageKey: null, invalidMessageKey: null,
isValid: null, isValid: null,

Datei anzeigen

@ -1,21 +0,0 @@
import { default as discourseComputed } from "discourse-common/utils/decorators";
import Component from "@ember/component";
export default Component.extend({
classNames: "wizard-advanced-toggle",
@discourseComputed("showAdvanced")
toggleClass(showAdvanced) {
let classes = "btn";
if (showAdvanced) {
classes += " btn-primary";
}
return classes;
},
actions: {
toggleAdvanced() {
this.toggleProperty("showAdvanced");
},
},
});

Datei anzeigen

@ -1,8 +1,7 @@
import { default as discourseComputed } from "discourse-common/utils/decorators"; import { default as discourseComputed } from "discourse-common/utils/decorators";
import { and, empty, equal, or } from "@ember/object/computed"; import { empty, equal, or } from "@ember/object/computed";
import { notificationLevels, selectKitContent } from "../lib/wizard"; import { notificationLevels, selectKitContent } from "../lib/wizard";
import { computed } from "@ember/object"; import { computed } from "@ember/object";
import wizardSchema from "../lib/wizard-schema";
import UndoChanges from "../mixins/undo-changes"; import UndoChanges from "../mixins/undo-changes";
import Component from "@ember/component"; import Component from "@ember/component";
import I18n from "I18n"; import I18n from "I18n";
@ -16,6 +15,7 @@ export default Component.extend(UndoChanges, {
createTopic: equal("action.type", "create_topic"), createTopic: equal("action.type", "create_topic"),
updateProfile: equal("action.type", "update_profile"), updateProfile: equal("action.type", "update_profile"),
watchCategories: equal("action.type", "watch_categories"), watchCategories: equal("action.type", "watch_categories"),
watchTags: equal("action.type", "watch_tags"),
sendMessage: equal("action.type", "send_message"), sendMessage: equal("action.type", "send_message"),
openComposer: equal("action.type", "open_composer"), openComposer: equal("action.type", "open_composer"),
sendToApi: equal("action.type", "send_to_api"), sendToApi: equal("action.type", "send_to_api"),
@ -25,8 +25,6 @@ export default Component.extend(UndoChanges, {
createGroup: equal("action.type", "create_group"), createGroup: equal("action.type", "create_group"),
apiEmpty: empty("action.api"), apiEmpty: empty("action.api"),
groupPropertyTypes: selectKitContent(["id", "name"]), groupPropertyTypes: selectKitContent(["id", "name"]),
hasAdvanced: or("hasCustomFields", "routeTo"),
showAdvanced: and("hasAdvanced", "action.type"),
hasCustomFields: or( hasCustomFields: or(
"basicTopicFields", "basicTopicFields",
"updateProfile", "updateProfile",
@ -36,22 +34,14 @@ export default Component.extend(UndoChanges, {
basicTopicFields: or("createTopic", "sendMessage", "openComposer"), basicTopicFields: or("createTopic", "sendMessage", "openComposer"),
publicTopicFields: or("createTopic", "openComposer"), publicTopicFields: or("createTopic", "openComposer"),
showPostAdvanced: or("createTopic", "sendMessage"), showPostAdvanced: or("createTopic", "sendMessage"),
actionTypes: Object.keys(wizardSchema.action.types).map((type) => {
return {
id: type,
name: I18n.t(`admin.wizard.action.${type}.label`),
};
}),
availableNotificationLevels: notificationLevels.map((type) => { availableNotificationLevels: notificationLevels.map((type) => {
return { return {
id: type, id: type,
name: I18n.t( name: I18n.t(`admin.wizard.action.watch_x.notification_level.${type}`),
`admin.wizard.action.watch_categories.notification_level.${type}`
),
}; };
}), }),
messageUrl: "https://thepavilion.io/t/2810", messageUrl: "https://discourse.pluginmanager.org/t/action-settings",
@discourseComputed("action.type") @discourseComputed("action.type")
messageKey(type) { messageKey(type) {
@ -101,4 +91,14 @@ export default Component.extend(UndoChanges, {
} }
return apis.find((a) => a.name === api).endpoints; return apis.find((a) => a.name === api).endpoints;
}, },
@discourseComputed("fieldTypes")
hasEventField(fieldTypes) {
return fieldTypes.map((ft) => ft.id).includes("event");
},
@discourseComputed("fieldTypes")
hasLocationField(fieldTypes) {
return fieldTypes.map((ft) => ft.id).includes("location");
},
}); });

Datei anzeigen

@ -1,5 +1,5 @@
import { default as discourseComputed } from "discourse-common/utils/decorators"; import { default as discourseComputed } from "discourse-common/utils/decorators";
import { alias, equal, or } from "@ember/object/computed"; import { equal, or } from "@ember/object/computed";
import { computed } from "@ember/object"; import { computed } from "@ember/object";
import { selectKitContent } from "../lib/wizard"; import { selectKitContent } from "../lib/wizard";
import UndoChanges from "../mixins/undo-changes"; import UndoChanges from "../mixins/undo-changes";
@ -27,8 +27,7 @@ export default Component.extend(UndoChanges, {
isTextType: or("isText", "isTextarea", "isComposer"), isTextType: or("isText", "isTextarea", "isComposer"),
isComposerPreview: equal("field.type", "composer_preview"), isComposerPreview: equal("field.type", "composer_preview"),
categoryPropertyTypes: selectKitContent(["id", "slug"]), categoryPropertyTypes: selectKitContent(["id", "slug"]),
showAdvanced: alias("field.type"), messageUrl: "https://discourse.pluginmanager.org/t/field-settings",
messageUrl: "https://thepavilion.io/t/2809",
@discourseComputed("field.type") @discourseComputed("field.type")
validations(type) { validations(type) {
@ -144,11 +143,17 @@ export default Component.extend(UndoChanges, {
actions: { actions: {
imageUploadDone(upload) { imageUploadDone(upload) {
this.set("field.image", upload.url); this.setProperties({
"field.image": upload.url,
"field.image_upload_id": upload.id,
});
}, },
imageUploadDeleted() { imageUploadDeleted() {
this.set("field.image", null); this.setProperties({
"field.image": null,
"field.image_upload_id": null,
});
}, },
}, },
}); });

Datei anzeigen

@ -24,11 +24,17 @@ export default Component.extend({
actions: { actions: {
bannerUploadDone(upload) { bannerUploadDone(upload) {
this.set("step.banner", upload.url); this.setProperties({
"step.banner": upload.url,
"step.banner_upload_id": upload.id,
});
}, },
bannerUploadDeleted() { bannerUploadDeleted() {
this.set("step.banner", null); this.setProperties({
"step.banner": null,
"step.banner_upload_id": null,
});
}, },
}, },
}); });

Datei anzeigen

@ -71,6 +71,17 @@ export default Component.extend({
}); });
}, },
getNextIndex() {
const items = this.items;
if (!items || items.length === 0) {
return 0;
}
const numbers = items
.map((i) => Number(i.id.split("_").pop()))
.sort((a, b) => a - b);
return numbers[numbers.length - 1];
},
actions: { actions: {
add() { add() {
const items = this.get("items"); const items = this.get("items");
@ -78,7 +89,7 @@ export default Component.extend({
let params = setWizardDefaults({}, itemType); let params = setWizardDefaults({}, itemType);
params.isNew = true; params.isNew = true;
params.index = items.length; params.index = this.getNextIndex();
let id = `${itemType}_${params.index + 1}`; let id = `${itemType}_${params.index + 1}`;
if (itemType === "field") { if (itemType === "field") {

Datei anzeigen

@ -15,6 +15,7 @@ import {
import Component from "@ember/component"; import Component from "@ember/component";
import { bind, later } from "@ember/runloop"; import { bind, later } from "@ember/runloop";
import I18n from "I18n"; import I18n from "I18n";
import Subscription from "../mixins/subscription";
const customFieldActionMap = { const customFieldActionMap = {
topic: ["create_topic", "send_message"], topic: ["create_topic", "send_message"],
@ -26,7 +27,7 @@ const customFieldActionMap = {
const values = ["present", "true", "false"]; const values = ["present", "true", "false"];
export default Component.extend({ export default Component.extend(Subscription, {
classNameBindings: [":mapper-selector", "activeType"], classNameBindings: [":mapper-selector", "activeType"],
showText: computed("activeType", function () { showText: computed("activeType", function () {
@ -116,6 +117,9 @@ export default Component.extend({
groupEnabled: computed("options.groupSelection", "inputType", function () { groupEnabled: computed("options.groupSelection", "inputType", function () {
return this.optionEnabled("groupSelection"); return this.optionEnabled("groupSelection");
}), }),
guestGroup: computed("options.guestGroup", "inputType", function () {
return this.optionEnabled("guestGroup");
}),
userEnabled: computed("options.userSelection", "inputType", function () { userEnabled: computed("options.userSelection", "inputType", function () {
return this.optionEnabled("userSelection"); return this.optionEnabled("userSelection");
}), }),
@ -126,7 +130,29 @@ export default Component.extend({
return this.connector === "is"; return this.connector === "is";
}), }),
groups: alias("site.groups"), @discourseComputed("site.groups", "guestGroup", "subscriptionType")
groups(groups, guestGroup, subscriptionType) {
let result = groups;
if (!guestGroup) {
return result;
}
if (["standard", "business"].includes(subscriptionType)) {
let guestIndex;
result.forEach((r, index) => {
if (r.id === 0) {
r.name = I18n.t("admin.wizard.selector.label.users");
guestIndex = index;
}
});
result.splice(guestIndex, 0, {
id: -1,
name: I18n.t("admin.wizard.selector.label.guests"),
});
}
return result;
},
categories: alias("site.categories"), categories: alias("site.categories"),
showComboBox: or( showComboBox: or(
"showWizardField", "showWizardField",
@ -377,7 +403,7 @@ export default Component.extend({
this.changeValue(event.target.value); this.changeValue(event.target.value);
}, },
changeUserValue(previousValue, value) { changeUserValue(value) {
this.changeValue(value); this.changeValue(value);
}, },
}, },

Datei anzeigen

@ -32,6 +32,7 @@ export default Component.extend({
pairConnector: options.pairConnector || null, pairConnector: options.pairConnector || null,
outputConnector: options.outputConnector || null, outputConnector: options.outputConnector || null,
context: options.context || null, context: options.context || null,
guestGroup: options.guestGroup || false,
}; };
let inputTypes = ["key", "value", "output"]; let inputTypes = ["key", "value", "output"];

Datei anzeigen

@ -6,6 +6,7 @@ import I18n from "I18n";
const icons = { const icons = {
error: "times-circle", error: "times-circle",
success: "check-circle", success: "check-circle",
warn: "exclamation-circle",
info: "info-circle", info: "info-circle",
}; };

Datei anzeigen

@ -6,7 +6,8 @@ import discourseComputed from "discourse-common/utils/decorators";
import I18n from "I18n"; import I18n from "I18n";
export default Component.extend({ export default Component.extend({
classNames: ["realtime-validations"], classNames: ["realtime-validations", "setting", "full", "subscription"],
@discourseComputed @discourseComputed
timeUnits() { timeUnits() {
return ["days", "weeks", "months", "years"].map((unit) => { return ["days", "weeks", "months", "years"].map((unit) => {

Datei anzeigen

@ -0,0 +1,30 @@
import Component from "@ember/component";
import discourseComputed from "discourse-common/utils/decorators";
import Subscription from "../mixins/subscription";
import DiscourseURL from "discourse/lib/url";
import I18n from "I18n";
export default Component.extend(Subscription, {
tagName: "a",
classNameBindings: [":wizard-subscription-badge", "subscriptionType"],
attributeBindings: ["title"],
@discourseComputed("subscriptionType")
i18nKey(type) {
return `admin.wizard.subscription.type.${type ? type : "none"}`;
},
@discourseComputed("i18nKey")
title(i18nKey) {
return I18n.t(`${i18nKey}.title`);
},
@discourseComputed("i18nKey")
label(i18nKey) {
return I18n.t(`${i18nKey}.label`);
},
click() {
DiscourseURL.routeTo(this.subscriptionLink);
},
});

Datei anzeigen

@ -0,0 +1,26 @@
import Component from "@ember/component";
import discourseComputed from "discourse-common/utils/decorators";
import Subscription from "../mixins/subscription";
export default Component.extend(Subscription, {
classNameBindings: [":wizard-subscription-container", "subscribed"],
@discourseComputed("subscribed")
subscribedIcon(subscribed) {
return subscribed ? "check" : "times";
},
@discourseComputed("subscribed")
subscribedLabel(subscribed) {
return `admin.wizard.subscription.${
subscribed ? "subscribed" : "not_subscribed"
}.label`;
},
@discourseComputed("subscribed")
subscribedTitle(subscribed) {
return `admin.wizard.subscription.${
subscribed ? "subscribed" : "not_subscribed"
}.title`;
},
});

Datei anzeigen

@ -0,0 +1,36 @@
import Component from "@ember/component";
import discourseComputed from "discourse-common/utils/decorators";
import Subscription from "../mixins/subscription";
import I18n from "I18n";
export default Component.extend(Subscription, {
tagName: "a",
classNameBindings: [":btn", ":btn-pavilion-support", "subscriptionType"],
attributeBindings: ["title"],
@discourseComputed("subscribed")
i18nKey(subscribed) {
return `admin.wizard.subscription.cta.${
subscribed ? "subscribed" : "none"
}`;
},
@discourseComputed("subscribed")
icon(subscribed) {
return subscribed ? "far-life-ring" : "external-link-alt";
},
@discourseComputed("i18nKey")
title(i18nKey) {
return I18n.t(`${i18nKey}.title`);
},
@discourseComputed("i18nKey")
label(i18nKey) {
return I18n.t(`${i18nKey}.label`);
},
click() {
window.open(this.subscriptionCtaLink, "_blank").focus();
},
});

Datei anzeigen

@ -0,0 +1,96 @@
import SingleSelectComponent from "select-kit/components/single-select";
import Subscription from "../mixins/subscription";
import { filterValues } from "discourse/plugins/discourse-custom-wizard/discourse/lib/wizard-schema";
import discourseComputed from "discourse-common/utils/decorators";
import I18n from "I18n";
const nameKey = function (feature, attribute, value) {
if (feature === "action") {
return `admin.wizard.action.${value}.label`;
} else {
return `admin.wizard.${feature}.${attribute}.${value}`;
}
};
export default SingleSelectComponent.extend(Subscription, {
classNames: ["combo-box", "wizard-subscription-selector"],
selectKitOptions: {
autoFilterable: false,
filterable: false,
showFullTitle: true,
headerComponent:
"wizard-subscription-selector/wizard-subscription-selector-header",
caretUpIcon: "caret-up",
caretDownIcon: "caret-down",
},
allowedSubscriptionTypes(feature, attribute, value) {
let attributes = this.subscriptionAttributes[feature];
if (!attributes || !attributes[attribute]) {
return ["none"];
}
let allowedTypes = [];
Object.keys(attributes[attribute]).forEach((subscriptionType) => {
let values = attributes[attribute][subscriptionType];
if (values[0] === "*" || values.includes(value)) {
allowedTypes.push(subscriptionType);
}
});
return allowedTypes;
},
@discourseComputed("feature", "attribute", "wizard.allowGuests")
content(feature, attribute) {
return filterValues(this.wizard, feature, attribute)
.map((value) => {
let allowedSubscriptionTypes = this.allowedSubscriptionTypes(
feature,
attribute,
value
);
let subscriptionRequired =
allowedSubscriptionTypes.length &&
!allowedSubscriptionTypes.includes("none");
let attrs = {
id: value,
name: I18n.t(nameKey(feature, attribute, value)),
subscriptionRequired,
};
if (subscriptionRequired) {
let subscribed = allowedSubscriptionTypes.includes(
this.subscriptionType
);
let selectorKey = subscribed ? "subscribed" : "not_subscribed";
let selectorLabel = `admin.wizard.subscription.${selectorKey}.selector`;
attrs.disabled = !subscribed;
attrs.selectorLabel = selectorLabel;
}
return attrs;
})
.sort(function (a, b) {
if (a.subscriptionType && !b.subscriptionType) {
return 1;
}
if (!a.subscriptionType && b.subscriptionType) {
return -1;
}
if (a.subscriptionType === b.subscriptionType) {
return a.subscriptionType
? a.subscriptionType.localeCompare(b.subscriptionType)
: 0;
} else {
return a.subscriptionType === "standard" ? -1 : 0;
}
});
},
modifyComponentForRow() {
return "wizard-subscription-selector/wizard-subscription-selector-row";
},
});

Datei anzeigen

@ -0,0 +1,17 @@
import SingleSelectHeaderComponent from "select-kit/components/select-kit/single-select-header";
import { computed } from "@ember/object";
import { reads } from "@ember/object/computed";
export default SingleSelectHeaderComponent.extend({
classNames: ["combo-box-header", "wizard-subscription-selector-header"],
caretUpIcon: reads("selectKit.options.caretUpIcon"),
caretDownIcon: reads("selectKit.options.caretDownIcon"),
caretIcon: computed(
"selectKit.isExpanded",
"caretUpIcon",
"caretDownIcon",
function () {
return this.selectKit.isExpanded ? this.caretUpIcon : this.caretDownIcon;
}
),
});

Datei anzeigen

@ -0,0 +1,20 @@
import SelectKitRowComponent from "select-kit/components/select-kit/select-kit-row";
import { default as discourseComputed } from "discourse-common/utils/decorators";
export default SelectKitRowComponent.extend({
classNameBindings: ["isDisabled:disabled"],
@discourseComputed("item")
isDisabled() {
return this.item.disabled;
},
click(event) {
event.preventDefault();
event.stopPropagation();
if (!this.item.disabled) {
this.selectKit.select(this.rowValue, this.item);
}
return false;
},
});

Datei anzeigen

@ -0,0 +1,139 @@
import Component from "@ember/component";
import { action } from "@ember/object";
import { equal, notEmpty } from "@ember/object/computed";
import discourseComputed from "discourse-common/utils/decorators";
import I18n from "I18n";
export default Component.extend({
classNameBindings: ["value.type"],
isText: equal("value.type", "text"),
isComposer: equal("value.type", "composer"),
isDate: equal("value.type", "date"),
isTime: equal("value.type", "time"),
isDateTime: equal("value.type", "date_time"),
isNumber: equal("value.type", "number"),
isCheckbox: equal("value.type", "checkbox"),
isUrl: equal("value.type", "url"),
isUpload: equal("value.type", "upload"),
isDropdown: equal("value.type", "dropdown"),
isTag: equal("value.type", "tag"),
isCategory: equal("value.type", "category"),
isGroup: equal("value.type", "group"),
isUserSelector: equal("value.type", "user_selector"),
isSubmittedAt: equal("field", "submitted_at"),
isComposerPreview: equal("value.type", "composer_preview"),
textState: "text-collapsed",
toggleText: I18n.t("admin.wizard.expand_text"),
@discourseComputed("value", "isUser", "isSubmittedAt")
hasValue(value, isUser, isSubmittedAt) {
if (isUser || isSubmittedAt) {
return value;
}
return value && value.value;
},
@discourseComputed("field", "value.type")
isUser(field, type) {
return field === "username" || field === "user" || type === "user";
},
@discourseComputed("value.type")
isLongtext(type) {
return type === "textarea" || type === "long_text";
},
@discourseComputed("value")
checkboxValue(value) {
const isCheckbox = this.get("isCheckbox");
if (isCheckbox) {
if (value.value.includes("true")) {
return true;
} else if (value.value.includes("false")) {
return false;
}
}
},
@action
expandText() {
const state = this.get("textState");
if (state === "text-collapsed") {
this.set("textState", "text-expanded");
this.set("toggleText", I18n.t("admin.wizard.collapse_text"));
} else if (state === "text-expanded") {
this.set("textState", "text-collapsed");
this.set("toggleText", I18n.t("admin.wizard.expand_text"));
}
},
@discourseComputed("value")
file(value) {
const isUpload = this.get("isUpload");
if (isUpload) {
return value.value;
}
},
@discourseComputed("value")
submittedUsers(value) {
const isUserSelector = this.get("isUserSelector");
const users = [];
if (isUserSelector) {
const userData = value.value;
const usernames = [];
if (userData.indexOf(",")) {
usernames.push(...userData.split(","));
usernames.forEach((u) => {
const user = {
username: u,
url: `/u/${u}`,
};
users.push(user);
});
}
}
return users;
},
@discourseComputed("isUser", "field", "value")
username(isUser, field, value) {
if (isUser) {
return value.username;
}
if (field === "username") {
return value.value;
}
return null;
},
showUsername: notEmpty("username"),
@discourseComputed("username")
userProfileUrl(username) {
if (username) {
return `/u/${username}`;
}
return "/";
},
@discourseComputed("value")
categoryUrl(value) {
const isCategory = this.get("isCategory");
if (isCategory) {
return `/c/${value.value}`;
}
},
@discourseComputed("value")
groupUrl(value) {
const isGroup = this.get("isGroup");
if (isGroup) {
return `/g/${value.value}`;
}
},
});

Datei anzeigen

@ -5,11 +5,7 @@ import { scheduleOnce } from "@ember/runloop";
import Component from "@ember/component"; import Component from "@ember/component";
import I18n from "I18n"; import I18n from "I18n";
const excludedUserProperties = [ const excludedUserProperties = ["profile_background", "card_background"];
"avatar",
"profile_background",
"card_background",
];
export default Component.extend({ export default Component.extend({
classNames: "wizard-text-editor", classNames: "wizard-text-editor",
@ -52,12 +48,12 @@ export default Component.extend({
@discourseComputed("wizardFields") @discourseComputed("wizardFields")
wizardFieldList(wizardFields) { wizardFieldList(wizardFields) {
return wizardFields.map((f) => ` w{${f.id}}`); return (wizardFields || []).map((f) => ` w{${f.id}}`);
}, },
@discourseComputed("wizardActions") @discourseComputed("wizardActions")
wizardActionList(wizardActions) { wizardActionList(wizardActions) {
return wizardActions.map((a) => ` w{${a.id}}`); return (wizardActions || []).map((a) => ` w{${a.id}}`);
}, },
actions: { actions: {

Datei anzeigen

@ -1,3 +1,7 @@
{{#if currentUser.admin}} {{#if currentUser.admin}}
{{nav-item route="adminWizards" label="admin.wizard.nav_label"}} {{nav-item route="adminWizards" label="admin.wizard.nav_label"}}
{{/if}}
{{#if wizardErrorNotice}}
{{d-icon "exclaimation-circle"}}
{{/if}}
{{/if}}

Datei anzeigen

@ -6,11 +6,10 @@
</label> </label>
<div class="controls"> <div class="controls">
{{combo-box {{combo-box
value=wizardListVal value=wizardListVal
content=wizardList content=wizardList
onChange=(action "changeWizard") onChange=(action "changeWizard")
options=(hash options=(hash none="admin.wizard.select")
none="admin.wizard.select" }}
)}}
</div> </div>
</section> </section>

Datei anzeigen

@ -1,9 +1,9 @@
import CustomWizard from "../../models/custom-wizard"; import CustomWizardAdmin from "../../models/custom-wizard-admin";
import { popupAjaxError } from "discourse/lib/ajax-error"; import { popupAjaxError } from "discourse/lib/ajax-error";
export default { export default {
setupComponent(attrs, component) { setupComponent(attrs, component) {
CustomWizard.all() CustomWizardAdmin.all()
.then((result) => { .then((result) => {
component.set("wizardList", result); component.set("wizardList", result);
}) })

Datei anzeigen

@ -1,7 +1,10 @@
{{#each site.complete_custom_wizard as |wizard|}} {{#each site.complete_custom_wizard as |wizard|}}
<div class="row"> <div class="row">
<div class="alert alert-info alert-wizard"> <div class="alert alert-info alert-wizard">
<a href={{wizard.url}}>{{i18n "wizard.complete_custom" name=wizard.name}}</a> <a href={{wizard.url}}>{{i18n
"wizard.complete_custom"
name=wizard.name
}}</a>
</div> </div>
</div> </div>
{{/each}} {{/each}}

Datei anzeigen

@ -4,14 +4,18 @@ import CustomWizardApi from "../models/custom-wizard-api";
import { default as discourseComputed } from "discourse-common/utils/decorators"; import { default as discourseComputed } from "discourse-common/utils/decorators";
import { and, equal, not } from "@ember/object/computed"; import { and, equal, not } from "@ember/object/computed";
import { selectKitContent } from "../lib/wizard"; import { selectKitContent } from "../lib/wizard";
import { underscore } from "@ember/string";
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import I18n from "I18n"; import I18n from "I18n";
import { inject as service } from "@ember/service";
export default Controller.extend({ export default Controller.extend({
router: service(),
queryParams: ["refresh_list"], queryParams: ["refresh_list"],
loadingSubscriptions: false, loadingSubscriptions: false,
notAuthorized: not("api.authorized"), notAuthorized: not("api.authorized"),
endpointMethods: selectKitContent(["GET", "PUT", "POST", "PATCH", "DELETE"]), endpointMethods: selectKitContent(["PUT", "POST", "PATCH", "DELETE"]),
showRemove: not("isNew"), showRemove: not("isNew"),
showRedirectUri: and("threeLeggedOauth", "api.name"), showRedirectUri: and("threeLeggedOauth", "api.name"),
responseIcon: null, responseIcon: null,
@ -20,29 +24,8 @@ export default Controller.extend({
"application/x-www-form-urlencoded", "application/x-www-form-urlencoded",
]), ]),
successCodes: selectKitContent([ successCodes: selectKitContent([
100, 100, 101, 102, 200, 201, 202, 203, 204, 205, 206, 207, 208, 226, 300, 301,
101, 302, 303, 303, 304, 305, 306, 307, 308,
102,
200,
201,
202,
203,
204,
205,
206,
207,
208,
226,
300,
301,
302,
303,
303,
304,
305,
306,
307,
308,
]), ]),
@discourseComputed( @discourseComputed(
@ -88,6 +71,11 @@ export default Controller.extend({
twoLeggedOauth: equal("api.authType", "oauth_2"), twoLeggedOauth: equal("api.authType", "oauth_2"),
threeLeggedOauth: equal("api.authType", "oauth_3"), threeLeggedOauth: equal("api.authType", "oauth_3"),
@discourseComputed("api.isNew")
nameClass(isNew) {
return isNew ? "new" : "saved";
},
actions: { actions: {
addParam() { addParam() {
this.get("api.authParams").pushObject({}); this.get("api.authParams").pushObject({});
@ -113,7 +101,7 @@ export default Controller.extend({
if (authType === "oauth_2") { if (authType === "oauth_2") {
this.set("authorizing", true); this.set("authorizing", true);
ajax(`/admin/wizards/apis/${name.underscore()}/authorize`) ajax(`/admin/wizards/apis/${underscore(name)}/authorize`)
.catch(popupAjaxError) .catch(popupAjaxError)
.then((result) => { .then((result) => {
if (result.success) { if (result.success) {
@ -149,7 +137,6 @@ export default Controller.extend({
const api = this.get("api"); const api = this.get("api");
const name = api.name; const name = api.name;
const authType = api.authType; const authType = api.authType;
let refreshList = false; // eslint-disable-line
let error; let error;
if (!name || !authType) { if (!name || !authType) {
@ -164,11 +151,6 @@ export default Controller.extend({
data["title"] = api.title; data["title"] = api.title;
} }
const originalTitle = this.get("api.originalTitle");
if (api.get("isNew") || (originalTitle && api.title !== originalTitle)) {
refreshList = true;
}
if (api.get("isNew")) { if (api.get("isNew")) {
data["new"] = true; data["new"] = true;
} }
@ -188,11 +170,11 @@ export default Controller.extend({
if (!api[rp]) { if (!api[rp]) {
let key = rp.replace("auth", ""); let key = rp.replace("auth", "");
error = `${I18n.t( error = `${I18n.t(
`admin.wizard.api.auth.${key.underscore()}` `admin.wizard.api.auth.${underscore(key)}`
)} is required for ${authType}`; )} is required for ${authType}`;
break; break;
} }
data[rp.underscore()] = api[rp]; data[underscore(rp)] = api[rp];
} }
} }
@ -222,7 +204,7 @@ export default Controller.extend({
this.set("updating", true); this.set("updating", true);
ajax(`/admin/wizards/api/${name.underscore()}`, { ajax(`/admin/wizards/api/${underscore(name)}`, {
type: "PUT", type: "PUT",
data, data,
}) })
@ -245,7 +227,7 @@ export default Controller.extend({
this.set("updating", true); this.set("updating", true);
ajax(`/admin/wizards/api/${name.underscore()}`, { ajax(`/admin/wizards/api/${underscore(name)}`, {
type: "DELETE", type: "DELETE",
}) })
.catch(popupAjaxError) .catch(popupAjaxError)
@ -263,13 +245,13 @@ export default Controller.extend({
return; return;
} }
ajax(`/admin/wizards/api/${name.underscore()}/logs`, { ajax(`/admin/wizards/api/${underscore(name)}/logs`, {
type: "DELETE", type: "DELETE",
}) })
.catch(popupAjaxError) .catch(popupAjaxError)
.then((result) => { .then((result) => {
if (result.success) { if (result.success) {
this.transitionToRoute("adminWizardsApis").then(() => { this.router.transitionTo("adminWizardsApis").then(() => {
this.send("refreshModel"); this.send("refreshModel");
}); });
} }

Datei anzeigen

@ -4,7 +4,7 @@ import CustomWizardCustomField from "../models/custom-wizard-custom-field";
export default Controller.extend({ export default Controller.extend({
messageKey: "create", messageKey: "create",
fieldKeys: ["klass", "type", "name", "serializers"], fieldKeys: ["klass", "type", "name", "serializers"],
documentationUrl: "https://thepavilion.io/t/3572", documentationUrl: "https://discourse.pluginmanager.org/t/custom-fields",
actions: { actions: {
addField() { addField() {

Datei anzeigen

@ -0,0 +1,52 @@
import discourseComputed from "discourse-common/utils/decorators";
import { notEmpty } from "@ember/object/computed";
import CustomWizardLogs from "../models/custom-wizard-logs";
import Controller from "@ember/controller";
export default Controller.extend({
refreshing: false,
hasLogs: notEmpty("logs"),
page: 0,
canLoadMore: true,
logs: [],
messageKey: "viewing",
loadLogs() {
if (!this.canLoadMore) {
return;
}
const page = this.get("page");
const wizardId = this.get("wizard.id");
this.set("refreshing", true);
CustomWizardLogs.list(wizardId, page)
.then((result) => {
this.set("logs", this.logs.concat(result.logs));
})
.finally(() => this.set("refreshing", false));
},
@discourseComputed("hasLogs", "refreshing")
noResults(hasLogs, refreshing) {
return !hasLogs && !refreshing;
},
actions: {
loadMore() {
if (!this.loadingMore && this.logs.length < this.total) {
this.set("page", (this.page += 1));
this.loadLogs();
}
},
refresh() {
this.setProperties({
canLoadMore: true,
page: 0,
logs: [],
});
this.loadLogs();
},
},
});

Datei anzeigen

@ -1,50 +1,34 @@
import discourseComputed from "discourse-common/utils/decorators";
import { notEmpty } from "@ember/object/computed";
import CustomWizardLogs from "../models/custom-wizard-logs";
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import { default as discourseComputed } from "discourse-common/utils/decorators";
export default Controller.extend({ export default Controller.extend({
refreshing: false, documentationUrl: "https://thepavilion.io/t/2818",
hasLogs: notEmpty("logs"),
page: 0,
canLoadMore: true,
logs: [],
loadLogs() { @discourseComputed("wizardId")
if (!this.canLoadMore) { wizardName(wizardId) {
return; let currentWizard = this.wizardList.find(
(wizard) => wizard.id === wizardId
);
if (currentWizard) {
return currentWizard.name;
}
},
@discourseComputed("wizardName")
messageOpts(wizardName) {
return {
wizardName,
};
},
@discourseComputed("wizardId")
messageKey(wizardId) {
let key = "select";
if (wizardId) {
key = "viewing";
} }
this.set("refreshing", true); return key;
CustomWizardLogs.list()
.then((result) => {
if (!result || result.length === 0) {
this.set("canLoadMore", false);
}
this.set("logs", this.logs.concat(result));
})
.finally(() => this.set("refreshing", false));
},
@discourseComputed("hasLogs", "refreshing")
noResults(hasLogs, refreshing) {
return !hasLogs && !refreshing;
},
actions: {
loadMore() {
this.set("page", (this.page += 1));
this.loadLogs();
},
refresh() {
this.setProperties({
canLoadMore: true,
page: 0,
logs: [],
});
this.loadLogs();
},
}, },
}); });

Datei anzeigen

@ -7,7 +7,7 @@ import I18n from "I18n";
import { underscore } from "@ember/string"; import { underscore } from "@ember/string";
export default Controller.extend({ export default Controller.extend({
messageUrl: "https://thepavilion.io/t/3652", messageUrl: "https://discourse.pluginmanager.org/t/wizard-manager",
messageKey: "info", messageKey: "info",
messageIcon: "info-circle", messageIcon: "info-circle",
messageClass: "info", messageClass: "info",
@ -68,7 +68,7 @@ export default Controller.extend({
file: null, file: null,
filename: null, filename: null,
}); });
$("#file-upload").val(""); document.getElementById("custom-wizard-file-upload").value = "";
}, },
@observes("importing", "destroying") @observes("importing", "destroying")
@ -83,7 +83,7 @@ export default Controller.extend({
actions: { actions: {
upload() { upload() {
$("#file-upload").click(); document.getElementById("custom-wizard-file-upload").click();
}, },
clearFile() { clearFile() {
@ -102,7 +102,7 @@ export default Controller.extend({
if (maxFileSize < file.size) { if (maxFileSize < file.size) {
this.setMessage("error", "file_size_error"); this.setMessage("error", "file_size_error");
this.set("file", null); this.set("file", null);
$("#file-upload").val(""); document.getElementById("custom-wizard-file-upload").value = "";
} else { } else {
this.setProperties({ this.setProperties({
file, file,

Datei anzeigen

@ -1,6 +1,74 @@
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import { empty } from "@ember/object/computed";
import discourseComputed from "discourse-common/utils/decorators";
import { fmt } from "discourse/lib/computed"; import { fmt } from "discourse/lib/computed";
import { inject as service } from "@ember/service";
import AdminWizardsColumnsModal from "../components/modal/admin-wizards-columns";
import CustomWizardAdmin from "../models/custom-wizard-admin";
import { formatModel } from "../lib/wizard-submission";
export default Controller.extend({ export default Controller.extend({
modal: service(),
downloadUrl: fmt("wizard.id", "/admin/wizards/submissions/%@/download"), downloadUrl: fmt("wizard.id", "/admin/wizards/submissions/%@/download"),
noResults: empty("submissions"),
page: 0,
total: 0,
loadMoreSubmissions() {
const page = this.get("page");
const wizardId = this.get("wizard.id");
this.set("loadingMore", true);
CustomWizardAdmin.submissions(wizardId, page)
.then((result) => {
if (result.submissions) {
const { submissions } = formatModel(result);
this.get("submissions").pushObjects(submissions);
}
})
.finally(() => {
this.set("loadingMore", false);
});
},
@discourseComputed("submissions.[]", "fields.@each.enabled")
displaySubmissions(submissions, fields) {
let result = [];
submissions.forEach((submission) => {
let sub = {};
Object.keys(submission).forEach((fieldId) => {
if (fields.some((f) => f.id === fieldId && f.enabled)) {
sub[fieldId] = submission[fieldId];
}
});
result.push(sub);
});
return result;
},
actions: {
loadMore() {
if (!this.loadingMore && this.submissions.length < this.total) {
this.set("page", this.get("page") + 1);
this.loadMoreSubmissions();
}
},
showEditColumnsModal() {
return this.modal.show(AdminWizardsColumnsModal, {
model: {
columns: this.get("fields"),
reset: () => {
this.get("fields").forEach((field) => {
field.set("enabled", true);
});
},
},
});
},
},
}); });

Datei anzeigen

@ -0,0 +1,34 @@
import Controller from "@ember/controller";
import { default as discourseComputed } from "discourse-common/utils/decorators";
export default Controller.extend({
documentationUrl: "https://thepavilion.io/t/2818",
@discourseComputed("wizardId")
wizardName(wizardId) {
let currentWizard = this.wizardList.find(
(wizard) => wizard.id === wizardId
);
if (currentWizard) {
return currentWizard.name;
}
},
@discourseComputed("wizardName")
messageOpts(wizardName) {
return {
wizardName,
};
},
@discourseComputed("wizardId")
messageKey(wizardId) {
let key = "select";
if (wizardId) {
key = "viewing";
}
return key;
},
});

Datei anzeigen

@ -3,15 +3,18 @@ import {
observes, observes,
} from "discourse-common/utils/decorators"; } from "discourse-common/utils/decorators";
import { notEmpty } from "@ember/object/computed"; import { notEmpty } from "@ember/object/computed";
import showModal from "discourse/lib/show-modal"; import { inject as service } from "@ember/service";
import NextSessionScheduledModal from "../components/modal/next-session-scheduled";
import { generateId, wizardFieldList } from "../lib/wizard"; import { generateId, wizardFieldList } from "../lib/wizard";
import { dasherize } from "@ember/string"; import { dasherize } from "@ember/string";
import { later, scheduleOnce } from "@ember/runloop"; import { later, scheduleOnce } from "@ember/runloop";
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import copyText from "discourse/lib/copy-text"; import copyText from "discourse/lib/copy-text";
import I18n from "I18n"; import I18n from "I18n";
import { filterValues } from "discourse/plugins/discourse-custom-wizard/discourse/lib/wizard-schema";
export default Controller.extend({ export default Controller.extend({
modal: service(),
hasName: notEmpty("wizard.name"), hasName: notEmpty("wizard.name"),
@observes("currentStep") @observes("currentStep")
@ -36,7 +39,8 @@ export default Controller.extend({
@discourseComputed("wizard.id") @discourseComputed("wizard.id")
wizardUrl(wizardId) { wizardUrl(wizardId) {
return window.location.origin + "/w/" + dasherize(wizardId); let baseUrl = window.location.href.split("/admin");
return baseUrl[0] + "/w/" + dasherize(wizardId);
}, },
@discourseComputed("wizard.after_time_scheduled") @discourseComputed("wizard.after_time_scheduled")
@ -58,6 +62,19 @@ export default Controller.extend({
} }
return wizardFieldList(steps); return wizardFieldList(steps);
}, },
@discourseComputed("fieldTypes", "wizard.allowGuests")
filteredFieldTypes(fieldTypes) {
const fieldTypeIds = fieldTypes.map((f) => f.id);
const allowedTypeIds = filterValues(
this.wizard,
"field",
"type",
fieldTypeIds
);
return fieldTypes.filter((f) => allowedTypeIds.includes(f.id));
},
getErrorMessage(result) { getErrorMessage(result) {
if (result.backend_validation_error) { if (result.backend_validation_error) {
return result.backend_validation_error; return result.backend_validation_error;
@ -92,7 +109,11 @@ export default Controller.extend({
wizard wizard
.save(opts) .save(opts)
.then((result) => { .then((result) => {
this.send("afterSave", result.wizard_id); if (result.wizard_id) {
this.send("afterSave", result.wizard_id);
} else if (result.errors) {
this.set("error", result.errors.join(", "));
}
}) })
.catch((result) => { .catch((result) => {
this.set("error", this.getErrorMessage(result)); this.set("error", this.getErrorMessage(result));
@ -107,19 +128,13 @@ export default Controller.extend({
}, },
setNextSessionScheduled() { setNextSessionScheduled() {
let controller = showModal("next-session-scheduled", { this.modal.show(NextSessionScheduledModal, {
model: { model: {
dateTime: this.wizard.after_time_scheduled, dateTime: this.wizard.after_time_scheduled,
update: (dateTime) => update: (dateTime) =>
this.set("wizard.after_time_scheduled", dateTime), this.set("wizard.after_time_scheduled", dateTime),
}, },
}); });
controller.setup();
},
toggleAdvanced() {
this.toggleProperty("wizard.showAdvanced");
}, },
copyUrl() { copyUrl() {

Datei anzeigen

@ -21,5 +21,6 @@ export default Controller.extend({
return key; return key;
}, },
messageUrl: "https://thepavilion.io/c/knowledge/discourse/custom-wizard", messageUrl:
"https://discourse.pluginmanager.org/c/discourse-custom-wizard/documentation",
}); });

Datei anzeigen

@ -0,0 +1,9 @@
import Controller from "@ember/controller";
import { equal, or } from "@ember/object/computed";
export default Controller.extend({
businessSubscription: equal("subscriptionType", "business"),
communitySubscription: equal("subscriptionType", "community"),
standardSubscription: equal("subscriptionType", "standard"),
showApi: or("businessSubscription", "communitySubscription"),
});

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden Mehr anzeigen