Compare commits

...

181 Commits
2.2 ... oasis

Author SHA1 Message Date
MakingCG
571fec7949 Fix backend code styling 2021-07-09 10:27:48 +00:00
Peter Papp
f9b5595ab6 versioning 2021-07-09 12:27:19 +02:00
Peter Papp
b358a614e2 Merge remote-tracking branch 'origin/oasis' into oasis 2021-07-09 12:23:43 +02:00
Peter Papp
7d9d2a9da9 production build 2021-07-09 12:23:35 +02:00
MakingCG
c132601f06 Fix backend code styling 2021-07-09 10:19:13 +00:00
Peter Papp
0e4595c30f Merge remote-tracking branch 'origin/oasis' into oasis
# Conflicts:
#	app/Http/helpers.php
2021-07-09 12:18:17 +02:00
Peter Papp
c323304f2e ability to delete ic dpb 2021-07-09 12:17:34 +02:00
Peter Papp
d9ee68db7c Merge remote-tracking branch 'origin/master' into oasis
# Conflicts:
#	app/Http/helpers.php
2021-07-09 12:06:58 +02:00
MakingCG
756e0c4ca3 Fix backend code styling 2021-06-29 16:40:19 +00:00
Peter Papp
c52c576f7c Merge remote-tracking branch 'origin/master' into oasis
# Conflicts:
#	.php-cs-fixer.cache
#	app/Http/helpers.php
#	app/Services/FileManagerService.php
#	composer.lock
#	public/chunks/environment-setup.js
#	public/chunks/files~chunks/shared/file-browser.js
#	public/js/main.js
#	public/mix-manifest.json
2021-06-29 18:38:53 +02:00
MakingCG
1a63f3aa07 Application Build 2021-05-27 10:37:31 +00:00
Peter Papp
f29a93f77b Merge remote-tracking branch 'origin/oasis' into oasis
# Conflicts:
#	public/mix-manifest.json
2021-05-27 12:34:24 +02:00
Peter Papp
f294c8f4a1 separated advance invoice number 2021-05-27 12:34:12 +02:00
MakingCG
959beae9e9 Application Build 2021-05-24 14:53:16 +00:00
Peter Papp
524b5a94df Merge remote-tracking branch 'origin/oasis' into oasis 2021-05-24 16:51:14 +02:00
Peter Papp
05dc227650 composer vuefilemanager-invoicing 2021-05-24 16:51:07 +02:00
MakingCG
350f130d98 Fix backend code styling 2021-05-24 14:48:13 +00:00
Peter Papp
99b4b030d2 Merge remote-tracking branch 'origin/oasis' into oasis
# Conflicts:
#	public/mix-manifest.json
2021-05-24 16:47:34 +02:00
Peter Papp
8a2af11f6a - invoice fixes
- optimization for new invoicing module
2021-05-24 16:47:21 +02:00
Peter Papp
26636dffab php cs fixer fix 2021-05-24 09:58:03 +02:00
Peter Papp
3dae2a72c9 configured private repository 2021-05-21 10:15:00 +02:00
MakingCG
38fadeec5e Application Build 2021-05-21 08:07:00 +00:00
Peter Papp
31954767b7 changeable frontend invoicing currency 2021-05-21 10:04:37 +02:00
Peter Papp
c760116cbf Merge remote-tracking branch 'origin/oasis' into oasis 2021-05-20 17:27:35 +02:00
Peter Papp
49131ddf97 - makingcg/vuefilemanager-invoicing to dev-master 2021-05-20 17:27:27 +02:00
MakingCG
fb7338c2bb Application Build 2021-05-20 14:46:50 +00:00
Peter Papp
d2391afb14 - frontpage redirect
- remove default login
2021-05-20 16:44:42 +02:00
Peter Papp
8e66900d8d Merge remote-tracking branch 'origin/oasis' into oasis
# Conflicts:
#	public/mix-manifest.json
2021-05-20 16:25:32 +02:00
Peter Papp
1a77ccdb9d makingcg/vuefilemanager-invoicing v1.0 included 2021-05-20 16:25:19 +02:00
MakingCG
50a96d9051 Application Build 2021-05-20 08:46:02 +00:00
Peter Papp
7baf8f0ec9 Merge remote-tracking branch 'origin/oasis' into oasis
# Conflicts:
#	public/mix-manifest.json
2021-05-20 10:43:12 +02:00
Peter Papp
8389f7a4d6 fixed invoice discount 2021-05-20 10:42:58 +02:00
MakingCG
b74f93a271 Application Build 2021-05-19 14:25:05 +00:00
Peter Papp
ed9c80eb74 Merge remote-tracking branch 'origin/oasis' into oasis 2021-05-19 16:22:49 +02:00
Peter Papp
147f82e9a8 Total widget in invoice editor 2021-05-19 16:22:41 +02:00
MakingCG
15a6ad6166 Application Build 2021-05-19 13:35:56 +00:00
Peter Papp
3fbf0ca093 Merge remote-tracking branch 'origin/oasis' into oasis 2021-05-19 15:33:54 +02:00
Peter Papp
2586e65cf9 - vuefilemanager-invoicing from git 2021-05-19 15:33:48 +02:00
MakingCG
b8731a108b Fix backend code styling 2021-05-19 13:31:18 +00:00
Peter Papp
2f238c90d9 Merge remote-tracking branch 'origin/oasis' into oasis 2021-05-19 15:30:46 +02:00
Peter Papp
6f9ae7ebfe - added new invoice strings 2021-05-19 15:30:36 +02:00
Peter Papp
983425b89a - decimal price fixes 2021-05-19 13:03:33 +02:00
MakingCG
ca9ed1029e Fix backend code styling 2021-05-19 06:38:55 +00:00
Peter Papp
78aa1a0779 - added unit into invoice 2021-05-19 08:38:21 +02:00
Peter Papp
4ec2d1077f Merge remote-tracking branch 'origin/master' into oasis
# Conflicts:
#	.github/workflows/backend-code-style-fix.yml
#	.github/workflows/unit-testing.yml
#	composer.lock
#	public/chunks/admin-account.js
#	public/chunks/admin.js
#	public/chunks/app-appearance.js
#	public/chunks/app-billings.js
#	public/chunks/app-email.js
#	public/chunks/app-index.js
#	public/chunks/app-language.js
#	public/chunks/app-others.js
#	public/chunks/app-payments.js
#	public/chunks/app-settings.js
#	public/chunks/app-setup.js
#	public/chunks/billings-detail.js
#	public/chunks/contact-us.js
#	public/chunks/create-new-password.js
#	public/chunks/dashboard.js
#	public/chunks/database.js
#	public/chunks/dynamic-page.js
#	public/chunks/environment-setup.js
#	public/chunks/files.js
#	public/chunks/files~chunks/shared/file-browser.js
#	public/chunks/files~chunks/shared/file-browser~chunks/shared/single-file.js
#	public/chunks/forgotten-password.js
#	public/chunks/homepage.js
#	public/chunks/installation-disclaimer.js
#	public/chunks/invoices.js
#	public/chunks/page-edit.js
#	public/chunks/pages.js
#	public/chunks/plan-create.js
#	public/chunks/plan-delete.js
#	public/chunks/plan-settings.js
#	public/chunks/plan-subscribers.js
#	public/chunks/plan.js
#	public/chunks/plans.js
#	public/chunks/platform.js
#	public/chunks/profile.js
#	public/chunks/purchase-code.js
#	public/chunks/settings-create-payment-methods.js
#	public/chunks/settings-invoices.js
#	public/chunks/settings-password.js
#	public/chunks/settings-payment-methods.js
#	public/chunks/settings-storage.js
#	public/chunks/settings-subscription.js
#	public/chunks/settings.js
#	public/chunks/shared.js
#	public/chunks/shared/authenticate.js
#	public/chunks/shared/file-browser.js
#	public/chunks/shared/single-file.js
#	public/chunks/sign-in.js
#	public/chunks/sign-up.js
#	public/chunks/stripe-credentials.js
#	public/chunks/subscription-plans.js
#	public/chunks/subscription-service.js
#	public/chunks/upgrade-billing.js
#	public/chunks/upgrade-plan.js
#	public/chunks/user-create.js
#	public/chunks/user-delete.js
#	public/chunks/user-detail.js
#	public/chunks/user-invoices.js
#	public/chunks/user-password.js
#	public/chunks/user-storage.js
#	public/chunks/user-subscription.js
#	public/chunks/user.js
#	public/chunks/users.js
#	public/css/app.css
#	public/js/main.js
#	public/mix-manifest.json
2021-05-19 06:53:33 +02:00
Peter Papp
e371b37016 Merge remote-tracking branch 'origin/oasis' into oasis 2021-05-17 10:08:51 +02:00
Peter Papp
05583f74af added Code Style Fix workflow 2021-05-17 10:04:22 +02:00
MakingCG
6cbffd08b2 Application Build 2021-05-17 08:03:54 +00:00
Peter Papp
66fe92653c added frontend build workflow 2021-05-17 10:01:42 +02:00
Peter Papp
b16b8b87cc - dark mode
- fixes
2021-05-17 10:00:01 +02:00
Peter Papp
04a1f88abb Merge remote-tracking branch 'origin/master' into oasis
# Conflicts:
#	composer.lock
#	public/chunks/admin-account.js
#	public/chunks/admin.js
#	public/chunks/app-appearance.js
#	public/chunks/app-billings.js
#	public/chunks/app-email.js
#	public/chunks/app-index.js
#	public/chunks/app-language.js
#	public/chunks/app-others.js
#	public/chunks/app-payments.js
#	public/chunks/app-settings.js
#	public/chunks/app-setup.js
#	public/chunks/billings-detail.js
#	public/chunks/dashboard.js
#	public/chunks/database.js
#	public/chunks/environment-setup.js
#	public/chunks/files.js
#	public/chunks/files~chunks/shared/file-browser.js
#	public/chunks/files~chunks/shared/file-browser~chunks/shared/single-file.js
#	public/chunks/homepage.js
#	public/chunks/installation-disclaimer.js
#	public/chunks/invoices.js
#	public/chunks/page-edit.js
#	public/chunks/pages.js
#	public/chunks/plan-create.js
#	public/chunks/plan-settings.js
#	public/chunks/plan-subscribers.js
#	public/chunks/plan.js
#	public/chunks/plans.js
#	public/chunks/platform.js
#	public/chunks/profile.js
#	public/chunks/profile~chunks/settings-password.js
#	public/chunks/purchase-code.js
#	public/chunks/settings-create-payment-methods.js
#	public/chunks/settings-invoices.js
#	public/chunks/settings-payment-methods.js
#	public/chunks/settings-storage.js
#	public/chunks/settings-subscription.js
#	public/chunks/settings.js
#	public/chunks/shared.js
#	public/chunks/shared/file-browser.js
#	public/chunks/stripe-credentials.js
#	public/chunks/subscription-plans.js
#	public/chunks/subscription-service.js
#	public/chunks/upgrade-billing.js
#	public/chunks/upgrade-plan.js
#	public/chunks/user-create.js
#	public/chunks/user-detail.js
#	public/chunks/user-invoices.js
#	public/chunks/user-storage.js
#	public/chunks/user-subscription.js
#	public/chunks/user.js
#	public/chunks/users.js
#	public/js/main.js
#	public/mix-manifest.json
2021-05-15 07:27:01 +02:00
Peter Papp
0eee956011 setup billing profile redirect 2021-05-14 10:42:59 +02:00
Peter Papp
722eceb0c1 bug fixes 2021-05-14 10:29:46 +02:00
Peter Papp
b4e6561134 routes refactoring 2021-05-13 17:50:42 +02:00
Peter Papp
3af8bff13b - removed invoicing from oasis 2021-05-13 09:31:16 +02:00
Peter Papp
f5958dda57 - fixes 2021-05-11 18:24:22 +02:00
Peter Papp
e8ca132a8b - Invoice sorting refactored
- Frontend build
2021-05-11 10:57:30 +02:00
Peter Papp
a7a6ef9f0a Merge remote-tracking branch 'origin/master' into oasis
# Conflicts:
#	public/mix-manifest.json
#	resources/js/components/FilesView/Option.vue
#	resources/js/components/Others/MobileNavigation.vue
2021-05-11 10:37:31 +02:00
Peter Papp
a6db642db7 Invoice & Clients sorting 2021-05-11 10:09:50 +02:00
Peter Papp
1ea8f2ce60 share invoice on email frontend 2021-05-11 08:51:41 +02:00
Peter Papp
5ea898d716 share invoice on email backend 2021-05-11 07:45:38 +02:00
Peter Papp
9857a30d2c Helper methods refactoring 2021-05-11 07:27:26 +02:00
Peter Papp
ca255a7416 Merge remote-tracking branch 'origin/master' into oasis
# Conflicts:
#	public/chunks/admin-account.js
#	public/chunks/admin.js
#	public/chunks/app-appearance.js
#	public/chunks/app-billings.js
#	public/chunks/app-email.js
#	public/chunks/app-index.js
#	public/chunks/app-language.js
#	public/chunks/app-others.js
#	public/chunks/app-payments.js
#	public/chunks/app-setup.js
#	public/chunks/billings-detail.js
#	public/chunks/contact-us.js
#	public/chunks/dashboard.js
#	public/chunks/database.js
#	public/chunks/environment-setup.js
#	public/chunks/files.js
#	public/chunks/installation-disclaimer.js
#	public/chunks/invoices.js
#	public/chunks/page-edit.js
#	public/chunks/pages.js
#	public/chunks/plan-create.js
#	public/chunks/plan-delete.js
#	public/chunks/plan-settings.js
#	public/chunks/plan-subscribers.js
#	public/chunks/plans.js
#	public/chunks/platform.js
#	public/chunks/profile.js
#	public/chunks/settings-create-payment-methods.js
#	public/chunks/settings-invoices.js
#	public/chunks/settings-password.js
#	public/chunks/settings-payment-methods.js
#	public/chunks/settings.js
#	public/chunks/shared.js
#	public/chunks/shared/authenticate.js
#	public/chunks/shared/file-browser.js
#	public/chunks/shared/single-file.js
#	public/chunks/sign-in.js
#	public/chunks/sign-up.js
#	public/chunks/stripe-credentials.js
#	public/chunks/subscription-plans.js
#	public/chunks/subscription-service.js
#	public/chunks/upgrade-billing.js
#	public/chunks/upgrade-plan.js
#	public/chunks/user-create.js
#	public/chunks/user-delete.js
#	public/chunks/user-detail.js
#	public/chunks/user-invoices.js
#	public/chunks/user-password.js
#	public/chunks/user-storage.js
#	public/chunks/user-subscription.js
#	public/chunks/user.js
#	public/chunks/users.js
#	public/js/main.js
#	public/mix-manifest.json
#	resources/js/helpers.js
2021-05-10 17:15:37 +02:00
Peter Papp
73672bc023 i18n implementation into invoice module 2021-05-07 11:32:48 +02:00
Peter Papp
070f8b4d40 frontend fixes 2021-05-07 07:35:03 +02:00
Peter Papp
f5f0663d07 Merge remote-tracking branch 'origin/master' into oasis
# Conflicts:
#	.php_cs.cache
#	public/mix-manifest.json
#	resources/js/components/FilesView/FilePreviewMedia.vue
#	resources/js/components/Sidebar/SidebarNavigation.vue
#	resources/js/helpers.js
2021-05-06 16:06:17 +02:00
Peter Papp
69deafeda0 Set up billing profile 2021-05-06 09:15:37 +02:00
Peter Papp
070a3aaba4 Invoice empty page 2021-05-05 17:51:59 +02:00
Peter Papp
599b238ab4 Edit invoice 2021-05-05 17:07:36 +02:00
Peter Papp
bdfd92872e added backend translations 2021-05-05 09:41:13 +02:00
Peter Papp
62820c8ddb invoice frontend improvements 2021-05-04 17:43:42 +02:00
Peter Papp
c65414f0c4 Merge remote-tracking branch 'origin/oasis' into oasis
# Conflicts:
#	.php_cs.cache
2021-05-04 16:40:27 +02:00
Peter Papp
7cc27938bf Mobile optimization 2021-05-04 16:39:59 +02:00
Peter Papp
0332f8b1fb invoice backend VAT & discount calculations 2021-05-04 09:44:55 +02:00
Peter Papp
fbde515a40 Create invoice frontend enhancements 2021-05-04 07:42:40 +02:00
MakingCG
cc4f9c0b89 Fix backend code styling 2021-05-03 14:53:43 +00:00
Peter Papp
8a784f4520 Merge remote-tracking branch 'origin/oasis' into oasis 2021-05-03 16:53:13 +02:00
Peter Papp
9793a55efd Discount calculations frontend 2021-05-03 16:52:32 +02:00
Peter Papp
eb2a7323e9 Vat calculations frontend 2021-05-03 15:26:56 +02:00
Peter Papp
d162018fcf highlight invoice icon in menubar 2021-05-03 09:12:41 +02:00
Peter Papp
23611defc1 mobile optimization 2021-05-03 09:07:35 +02:00
Peter Papp
434c45299c oasis setup script 2021-05-03 08:12:37 +02:00
MakingCG
878bdb3ce7 Fix backend code styling 2021-05-03 05:29:49 +00:00
Peter Papp
fe0ed38157 Merge remote-tracking branch 'origin/master' into oasis
# Conflicts:
#	composer.lock
2021-05-03 07:29:06 +02:00
Peter Papp
8f9bdc5918 Merge remote-tracking branch 'origin/master' into oasis
# Conflicts:
#	composer.json
#	composer.lock
2021-05-03 07:12:21 +02:00
MakingCG
ed6c968dae Fix backend code styling 2021-04-30 15:56:04 +00:00
Peter Papp
c923a40363 Merge remote-tracking branch 'origin/oasis' into oasis
# Conflicts:
#	.php_cs.cache
#	app/Http/Controllers/Oasis/ClientController.php
#	app/Http/Controllers/Oasis/InvoiceController.php
#	app/Http/Requests/Oasis/StoreInvoiceRequest.php
#	app/Http/Resources/Oasis/OasisInvoiceResource.php
2021-04-30 17:54:21 +02:00
Peter Papp
3c3e82758d Create invoice form part 1. 2021-04-30 17:53:19 +02:00
Peter Papp
5167ae520e navigation fix 2021-04-30 08:16:44 +02:00
Peter Papp
aea4213ec2 Client cards 2021-04-29 15:01:50 +02:00
Peter Papp
31dd782bae Resource refactoring 2021-04-29 12:53:17 +02:00
MakingCG
120973ae00 Fix backend code styling 2021-04-29 09:07:05 +00:00
Peter Papp
1486ce63fa Merge remote-tracking branch 'origin/master' into oasis
# Conflicts:
#	app/Console/Commands/SetupDevEnvironment.php
#	app/Console/Kernel.php
#	app/Http/Resources/InvoiceResource.php
#	app/Http/Resources/UserResource.php
#	app/Models/User.php
#	composer.lock
#	config/app.php
#	config/custom-language-translations.php
#	config/language-translations.php
#	public/chunks/admin.js
#	public/chunks/app-language.js
#	public/chunks/dashboard.js
#	public/chunks/files.js
#	public/chunks/files~chunks/shared-files~chunks/shared/file-browser.js
#	public/chunks/files~chunks/shared-files~chunks/shared/file-browser~chunks/shared/single-file.js
#	public/chunks/invoices.js
#	public/chunks/pages.js
#	public/chunks/plan-subscribers.js
#	public/chunks/plans.js
#	public/chunks/platform.js
#	public/chunks/settings-invoices.js
#	public/chunks/settings-payment-methods.js
#	public/chunks/settings-subscription.js
#	public/chunks/shared-files.js
#	public/chunks/shared.js
#	public/chunks/shared/file-browser.js
#	public/chunks/user-invoices.js
#	public/chunks/user-subscription.js
#	public/chunks/users.js
#	public/js/main.js
#	public/mix-manifest.json
#	resources/js/components/FilesView/FileItemGrid.vue
#	resources/js/components/FilesView/FileItemList.vue
2021-04-29 11:06:14 +02:00
Peter Papp
834b0ba5e0 Edit client detail 2021-04-29 10:54:10 +02:00
Peter Papp
19bce195b4 Create client frontend 2021-04-29 08:57:53 +02:00
Peter Papp
13ec1257e1 Delete invoice 2021-04-28 18:44:42 +02:00
Peter Papp
248825f2d1 Delete client 2021-04-28 18:15:33 +02:00
Peter Papp
b37edd298a Billing profile implementation 2021-04-28 15:55:01 +02:00
Peter Papp
1e4bbd10f3 update invoice profile 2021-04-28 08:34:37 +02:00
Peter Papp
bcf14595bf store invoice profile 2021-04-28 07:32:40 +02:00
Peter Papp
e7c4048258 added invoice profile 2021-04-27 10:16:31 +02:00
Peter Papp
f7135c9b27 get invoice from url 2021-04-27 08:57:00 +02:00
Peter Papp
5be490c8d5 invoice to mail 2021-04-27 07:31:16 +02:00
Peter Papp
7cf193abb7 pdf invoice generation scaffolding 2021-04-26 17:03:17 +02:00
Peter Papp
644fbaede4 pdf installation 2021-04-26 08:15:11 +02:00
Peter Papp
e65e3e88d7 PDF Invoice 2021-04-24 07:40:20 +02:00
Peter Papp
9a5f9fe49d Create client 2021-04-23 08:37:54 +02:00
Peter Papp
16c47465e6 backend refactored 2021-04-23 08:21:26 +02:00
Peter Papp
da55b3dd78 backend refactored 2021-04-23 08:15:38 +02:00
Peter Papp
894cef5d66 Searching mobile frontend 2021-04-22 16:40:45 +02:00
Peter Papp
90f91c47ce Searching mobile frontend 2021-04-22 10:10:26 +02:00
Peter Papp
3774a05edd Searching frontend 2021-04-22 10:06:31 +02:00
Peter Papp
73861f814c Searching backend 2021-04-22 09:33:52 +02:00
Peter Papp
5b70066900 Invoice wrapper 2021-04-22 08:29:00 +02:00
Peter Papp
4b0e4da013 - Client list
- Context menu
2021-04-22 07:36:52 +02:00
Peter Papp
eae212ac5d - Invoice listing in frontend 2021-04-21 16:53:39 +02:00
Peter Papp
5a9583be5b - client and invoice scaffolding 2021-04-21 15:22:54 +02:00
Peter Papp
aa585b60d5 - desktop toolbar 2021-04-21 08:03:49 +02:00
Peter Papp
8707a61144 - desktop navigation
- invoice vuex module
2021-04-21 07:56:15 +02:00
Peter Papp
597a600109 Invoice sorting menu 2021-04-20 16:06:12 +02:00
Peter Papp
4dfc5bcc35 Invoice create menu 2021-04-20 15:51:01 +02:00
Peter Papp
33d45408d2 Mobile main navigation 2021-04-20 15:24:44 +02:00
Peter Papp
90051cec91 - Invoice sidebar
- mobile invoice menu
2021-04-20 15:11:55 +02:00
Peter Papp
dd0d10afda Popover for create button 2021-04-20 09:24:13 +02:00
Peter Papp
af571317ff Invoice Desktop Toolbar 2021-04-20 09:09:52 +02:00
Peter Papp
80019b822d Merge remote-tracking branch 'origin/master' into oasis
# Conflicts:
#	public/chunks/admin-account.js
#	public/chunks/admin.js
#	public/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~8cc7d96f.js
#	public/chunks/app-language.js
#	public/chunks/app-settings.js
#	public/chunks/app-setup.js
#	public/chunks/billings-detail.js
#	public/chunks/dashboard.js
#	public/chunks/database.js
#	public/chunks/environment-setup.js
#	public/chunks/files.js
#	public/chunks/files~chunks/shared-files~chunks/shared/file-browser.js
#	public/chunks/files~chunks/shared-files~chunks/shared/file-browser~chunks/shared/single-file.js
#	public/chunks/homepage.js
#	public/chunks/installation-disclaimer.js
#	public/chunks/invoices.js
#	public/chunks/page-edit.js
#	public/chunks/pages.js
#	public/chunks/plan-create.js
#	public/chunks/plan-settings.js
#	public/chunks/plan-subscribers.js
#	public/chunks/plan.js
#	public/chunks/plans.js
#	public/chunks/platform.js
#	public/chunks/profile.js
#	public/chunks/profile~chunks/settings-password.js
#	public/chunks/purchase-code.js
#	public/chunks/settings-create-payment-methods.js
#	public/chunks/settings-invoices.js
#	public/chunks/settings-payment-methods.js
#	public/chunks/settings-storage.js
#	public/chunks/settings-subscription.js
#	public/chunks/settings.js
#	public/chunks/shared-files.js
#	public/chunks/shared.js
#	public/chunks/shared/file-browser.js
#	public/chunks/stripe-credentials.js
#	public/chunks/subscription-plans.js
#	public/chunks/subscription-service.js
#	public/chunks/upgrade-billing.js
#	public/chunks/upgrade-plan.js
#	public/chunks/user-create.js
#	public/chunks/user-delete.js
#	public/chunks/user-detail.js
#	public/chunks/user-invoices.js
#	public/chunks/user-storage.js
#	public/chunks/user-subscription.js
#	public/chunks/user.js
#	public/chunks/users.js
#	public/js/main.js
#	public/mix-manifest.json
#	public/vendors~chunks/platform~chunks/shared.js
2021-04-20 08:15:34 +02:00
Peter Papp
edafa1791b erase description from plan 2021-04-16 10:48:51 +02:00
Peter Papp
498f81b846 Changed contact informations on homepage 2021-04-16 10:34:06 +02:00
Peter Papp
56bbdc846c - Dashboard logo fix 2021-04-13 08:36:19 +02:00
Peter Papp
a2c606e1c7 - Dashboard logo
- Checkout mobile fix
- Frontend build
2021-04-13 08:32:48 +02:00
Peter Papp
3e61482a2c Merge remote-tracking branch 'origin/master' into oasis 2021-04-13 08:18:23 +02:00
Peter Papp
bec2dd0e03 frontend build 2021-04-12 06:59:15 +02:00
Peter Papp
0bf81164e7 Merge remote-tracking branch 'origin/master' into oasis
# Conflicts:
#	app/Console/Kernel.php
#	composer.json
#	composer.lock
#	public/chunks/admin-account.js
#	public/chunks/admin.js
#	public/chunks/app-appearance.js
#	public/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~8cc7d96f.js
#	public/chunks/app-billings.js
#	public/chunks/app-email.js
#	public/chunks/app-index.js
#	public/chunks/app-language.js
#	public/chunks/app-others.js
#	public/chunks/app-payments.js
#	public/chunks/app-settings.js
#	public/chunks/app-setup.js
#	public/chunks/billings-detail.js
#	public/chunks/contact-us.js
#	public/chunks/create-new-password.js
#	public/chunks/dashboard.js
#	public/chunks/database.js
#	public/chunks/dynamic-page.js
#	public/chunks/environment-setup.js
#	public/chunks/files.js
#	public/chunks/files~chunks/shared-files~chunks/shared/file-browser.js
#	public/chunks/files~chunks/shared-files~chunks/shared/file-browser~chunks/shared/single-file.js
#	public/chunks/forgotten-password.js
#	public/chunks/homepage.js
#	public/chunks/installation-disclaimer.js
#	public/chunks/invoices.js
#	public/chunks/page-edit.js
#	public/chunks/pages.js
#	public/chunks/plan-create.js
#	public/chunks/plan-delete.js
#	public/chunks/plan-settings.js
#	public/chunks/plan-subscribers.js
#	public/chunks/plan.js
#	public/chunks/plans.js
#	public/chunks/platform.js
#	public/chunks/platform~chunks/shared.js
#	public/chunks/profile.js
#	public/chunks/profile~chunks/settings-password.js
#	public/chunks/purchase-code.js
#	public/chunks/settings-create-payment-methods.js
#	public/chunks/settings-invoices.js
#	public/chunks/settings-password.js
#	public/chunks/settings-payment-methods.js
#	public/chunks/settings-storage.js
#	public/chunks/settings-subscription.js
#	public/chunks/settings.js
#	public/chunks/setup-wizard.js
#	public/chunks/shared-files.js
#	public/chunks/shared.js
#	public/chunks/shared/authenticate.js
#	public/chunks/shared/file-browser.js
#	public/chunks/shared/single-file.js
#	public/chunks/sign-in.js
#	public/chunks/sign-up.js
#	public/chunks/stripe-credentials.js
#	public/chunks/subscription-plans.js
#	public/chunks/subscription-service.js
#	public/chunks/upgrade-billing.js
#	public/chunks/upgrade-plan.js
#	public/chunks/user-create.js
#	public/chunks/user-delete.js
#	public/chunks/user-detail.js
#	public/chunks/user-invoices.js
#	public/chunks/user-password.js
#	public/chunks/user-storage.js
#	public/chunks/user-subscription.js
#	public/chunks/user.js
#	public/chunks/users.js
#	public/js/main.js
#	public/mix-manifest.json
2021-04-12 06:57:47 +02:00
Peter Papp
e78f1ce731 - removed sign in credentials 2021-04-07 13:21:02 +02:00
Peter Papp
b00c8cdbed - updated composer 2021-04-07 08:16:29 +02:00
Peter Papp
44a656e5d5 - updated composer 2021-04-07 08:12:02 +02:00
Peter Papp
11c6690e50 - frontend build 2021-04-07 07:53:11 +02:00
Peter Papp
fac75c7e71 Merge remote-tracking branch 'origin/master' into oasis
# Conflicts:
#	composer.json
#	public/chunks/admin-account.js
#	public/chunks/admin.js
#	public/chunks/app-appearance.js
#	public/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~8cc7d96f.js
#	public/chunks/app-billings.js
#	public/chunks/app-email.js
#	public/chunks/app-index.js
#	public/chunks/app-language.js
#	public/chunks/app-others.js
#	public/chunks/app-payments.js
#	public/chunks/app-settings.js
#	public/chunks/app-setup.js
#	public/chunks/billings-detail.js
#	public/chunks/contact-us.js
#	public/chunks/create-new-password.js
#	public/chunks/dashboard.js
#	public/chunks/dashboard~chunks/invoices~chunks/pages~chunks/plans~chunks/user-invoices.js
#	public/chunks/database.js
#	public/chunks/dynamic-page.js
#	public/chunks/environment-setup.js
#	public/chunks/files.js
#	public/chunks/files~chunks/shared-files~chunks/shared/file-browser.js
#	public/chunks/files~chunks/shared-files~chunks/shared/file-browser~chunks/shared/single-file.js
#	public/chunks/forgotten-password.js
#	public/chunks/homepage.js
#	public/chunks/installation-disclaimer.js
#	public/chunks/invoices.js
#	public/chunks/page-edit.js
#	public/chunks/pages.js
#	public/chunks/plan-create.js
#	public/chunks/plan-delete.js
#	public/chunks/plan-settings.js
#	public/chunks/plan-subscribers.js
#	public/chunks/plan.js
#	public/chunks/plans.js
#	public/chunks/platform.js
#	public/chunks/platform~chunks/shared.js
#	public/chunks/profile.js
#	public/chunks/profile~chunks/settings-password.js
#	public/chunks/purchase-code.js
#	public/chunks/settings-create-payment-methods.js
#	public/chunks/settings-invoices.js
#	public/chunks/settings-password.js
#	public/chunks/settings-payment-methods.js
#	public/chunks/settings-storage.js
#	public/chunks/settings-subscription.js
#	public/chunks/settings.js
#	public/chunks/setup-wizard.js
#	public/chunks/shared-files.js
#	public/chunks/shared.js
#	public/chunks/shared/authenticate.js
#	public/chunks/shared/file-browser.js
#	public/chunks/shared/single-file.js
#	public/chunks/sign-in.js
#	public/chunks/sign-up.js
#	public/chunks/stripe-credentials.js
#	public/chunks/subscription-plans.js
#	public/chunks/subscription-service.js
#	public/chunks/upgrade-billing.js
#	public/chunks/upgrade-plan.js
#	public/chunks/user-create.js
#	public/chunks/user-delete.js
#	public/chunks/user-detail.js
#	public/chunks/user-invoices.js
#	public/chunks/user-password.js
#	public/chunks/user-storage.js
#	public/chunks/user-subscription.js
#	public/chunks/user.js
#	public/chunks/users.js
#	public/css/app.css
#	public/js/main.js
#	public/mix-manifest.json
#	resources/js/router.js
#	resources/js/store/modules/userAuth.js
2021-04-07 07:52:07 +02:00
Peter Papp
57bab1a225 - frontend build
- fixes
2021-04-06 10:46:32 +02:00
Peter Papp
17ccf7b354 Merge remote-tracking branch 'origin/master' into oasis 2021-04-06 10:41:38 +02:00
Peter Papp
71147adb01 - flush cache after language upgrade
- Gateway fix
- extended language editor with textarea
2021-04-06 10:27:02 +02:00
Peter Papp
7cefcf8dab - fixed setup wizard
- fixed oasis UserAccountTest.php
2021-04-06 10:10:38 +02:00
Peter Papp
737adfa91a Merge remote-tracking branch 'origin/master' into oasis
# Conflicts:
#	public/js/main.js
#	public/mix-manifest.json
2021-04-06 10:02:20 +02:00
Peter Papp
20f8fe4b51 - i18n implementation into homepage 2021-04-06 08:26:35 +02:00
Peter Papp
e0daa46b50 - dark mode 2021-04-06 07:23:43 +02:00
Peter Papp
2ca4d4a02d - homepage mobile 2021-04-05 18:00:54 +02:00
Peter Papp
399748b01a - homepage desktop, ipad landscape 2021-04-05 16:43:12 +02:00
Peter Papp
2f4df83b31 - homepage illustrations part 2 2021-04-05 10:15:33 +02:00
Peter Papp
9ea78d103e - homepage illustrations part 1 2021-04-05 08:47:49 +02:00
Peter Papp
790da00420 - added OasisContact.vue
- Mobile responsivenes
2021-04-05 07:07:28 +02:00
Peter Papp
760d7a4687 Added OasisFooter.vue 2021-04-04 07:59:58 +02:00
Peter Papp
37ab6408ba Added OasisAboutUs.vue 2021-04-04 07:32:56 +02:00
Peter Papp
b3737c11ba Added OasisNavigation.vue and OasisPricing.vue 2021-04-03 11:28:05 +02:00
Peter Papp
4f667f7a94 Added OasisFeatures.vue and OasisHeader.vue 2021-04-03 10:44:32 +02:00
Peter Papp
377c471a6c Oasis landingpage scaffolding 2021-04-03 07:50:57 +02:00
Peter Papp
7cf09494e5 - Language implementation for oasis
- frontend build
2021-04-01 11:48:38 +02:00
Peter Papp
5d0348e2d0 Merge remote-tracking branch 'origin/v2' into oasis
# Conflicts:
#	app/Http/Controllers/User/AccountController.php
#	app/Http/helpers.php
#	public/mix-manifest.json
#	resources/js/components/FilesView/Icons/AlphabetIcon.vue
#	resources/js/components/FilesView/MobileActionButton.vue
#	resources/js/views/Admin/AppSettings/AppSettingsTabs/Appearance.vue
#	resources/js/views/Admin/Users/UserTabs/UserDetail.vue
#	resources/js/views/Upgrade/UpgradeBilling.vue
#	resources/views/index.blade.php
#	resources/views/vuefilemanager/invoice.blade.php
#	resources/views/vuefilemanager/others/color-template.blade.php
2021-04-01 10:45:10 +02:00
Peter Papp
6d5a43da72 frontend build 2021-03-26 16:59:08 +01:00
Peter Papp
d2a82aaa80 frontend build 2021-03-26 16:42:58 +01:00
Peter Papp
a3d4dfec3b - favicon fix
- checkout fix
- stripe prefered locales
- color theme
- stripe card info box in dev version
2021-03-26 16:02:02 +01:00
Peter Papp
ee1a8a6719 - cancel/resume subscription fix
- upload into root folder fix
- custom color theme part 3
2021-03-25 15:46:34 +01:00
Peter Papp
44fe96497c - cancel/resume subscription fix
- upload into root folder fix
- custom color theme part 3
2021-03-25 10:51:00 +01:00
Peter Papp
88c134918e - user not found fix in SignIn.vue page 2021-03-24 11:53:42 +01:00
Peter Papp
af79a28361 - redirect after sign in/up to payment page
- extended /api/oasis/subscribe function
- setup:dev extended data
2021-03-24 11:38:15 +01:00
Peter Papp
1bb3ca4fb5 - register route fix 2021-03-24 08:49:11 +01:00
Peter Papp
1ffa569ea3 - Zero capacity storage
- Set 0 storage capacity after creating order
2021-03-24 08:35:43 +01:00
Peter Papp
480f518ebc - Fixed UpgradeBilling.vue
- Fixed CreatePaymentMethod.vue
2021-03-24 08:19:52 +01:00
Peter Papp
888d76fea0 - scheduler command updates
- Order reminder notification
2021-03-24 07:32:08 +01:00
Peter Papp
47ce8c3eef - edit PaymentRequiredNotification.php 2021-03-24 06:55:48 +01:00
Peter Papp
75042e0c42 - set password backend 2021-03-23 15:32:28 +01:00
Peter Papp
9566a4a830 - set password and login frontend 2021-03-23 12:03:23 +01:00
Peter Papp
7521c588fc - payment for subscription frontend 2021-03-23 11:12:41 +01:00
Peter Papp
97f13c0b62 - added payment page 2021-03-23 09:07:31 +01:00
Peter Papp
4b97c674ba - creating user frontend 2021-03-23 08:20:54 +01:00
Peter Papp
0d4b8403ba - email template 2021-03-23 06:47:28 +01:00
Peter Papp
021e78e0c5 - Store creator into SubscriptionRequest 2021-03-22 15:48:46 +01:00
Peter Papp
778a94e5ba - Pay and subscribe from generated Subscription Request 2021-03-22 15:41:47 +01:00
Peter Papp
0db55b51d2 - get subscription request api 2021-03-22 12:05:45 +01:00
Peter Papp
45de6b557a - added subscriptionrequest
- Oasis model trait
2021-03-22 11:15:47 +01:00
Peter Papp
3c01ce5ad3 - admin client order 2021-03-22 10:43:37 +01:00
Peter Papp
80b24cd753 - added CzechRegisterSearchService
- oasis RouteServiceProvider.php
- oasis admincontroller
2021-03-22 08:19:50 +01:00
331 changed files with 17889 additions and 2169 deletions

View File

@@ -5,7 +5,7 @@ APP_DEBUG=true
APP_URL=http://localhost
APP_DEMO=false
LOG_CHANNEL=stack
LOG_CHANNEL=daily
DB_CONNECTION=sqlite
DB_HOST=null
@@ -45,9 +45,9 @@ PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1
CASHIER_LOGGER=stack
CASHIER_CURRENCY=EUR
STRIPE_KEY=pk_test_51GsACaCBETHMUxzVsYkeApHtqb85paMuye7G77PDDQ28kXqDJ5HTmqLi13aM6xee81OQK1fhkTZ7vmDiWLStU9160061Yb2MtL
STRIPE_SECRET=sk_test_51GsACaCBETHMUxzVviYCrv0CeZMyWAOfBPe4uH5rkKJcJxrXhIciWQTr7UB1sgw9geoJMkNDVSWBQW36tuAsVznd00zhNHXhok
CASHIER_CURRENCY=CZK
STRIPE_KEY=pk_test_51HSO06BwlPpoyJNwCscZSl5kYHtck4ChaICquBQodULHWTQlQxpEpQ22rQAPY1B82k78dR2tquugI3qRv2HcFrx300pqiho4Dz
STRIPE_SECRET=sk_test_51HSO06BwlPpoyJNwOCWiJafj5ebRF5dYQ0VpaQnHVWLZYYgj8jl3CX2K51Sf1cjDKxUzzGMVsg6e98i2GgtFSSfu00Q1uo6Knz
STRIPE_WEBHOOK_SECRET=whsec_eKrDhqtpbMUXOKqrUHf78SrZxHHYOdrf
CASHIER_PAYMENT_NOTIFICATION=App\Notifications\ConfirmPayment
CASHIER_MODEL=App\Models\User

View File

@@ -2,11 +2,10 @@ name: Code Style Fix
on:
push:
branches: [ master ]
branches: [ oasis ]
pull_request:
branches: [ master ]
branches: [ oasis ]
workflow_dispatch:
jobs:
php-cs-fixer:

View File

@@ -2,9 +2,9 @@ name: Frontend Build
on:
push:
branches: [ master ]
branches: [ oasis ]
pull_request:
branches: [ master ]
branches: [ oasis ]
workflow_dispatch:
@@ -32,4 +32,4 @@ jobs:
- name: Commit changes
uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: Application Build
commit_message: Application Build

View File

@@ -2,9 +2,9 @@ name: Unit Testing
on:
push:
branches: [ master ]
branches: [ oasis ]
pull_request:
branches: [ master ]
branches: [ oasis ]
workflow_dispatch:
@@ -35,6 +35,10 @@ jobs:
run: |
echo "::add-matcher::${{ runner.tool_cache }}/php.json"
echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json"
- uses: actions/labeler@v2
with:
repo-token: ${{ secrets.GTHB_TOKEN }}
- name: Install dependencies
run: composer update --${{ matrix.stability }} --prefer-dist --no-interaction

File diff suppressed because one or more lines are too long

View File

@@ -42,7 +42,7 @@ return $config->setRules([
'trailing_comma_in_multiline' => ['elements' => ['arrays']],
'phpdoc_scalar' => true,
'unary_operator_spaces' => true,
'binary_operator_spaces' => true,
'binary_operator_spaces' => ['operators' => ['=>' => 'align']],
'single_trait_insert_per_statement' => false,
'method_chaining_indentation' => true,
'array_indentation' => true,

File diff suppressed because one or more lines are too long

View File

@@ -29,7 +29,7 @@ class CreateNewUser implements CreatesNewUsers
}
Validator::make($input, [
'name' => ['required', 'string', 'max:255'],
'name' => ['required', 'string', 'max:255'],
'email' => [
'required',
'string',
@@ -41,7 +41,7 @@ class CreateNewUser implements CreatesNewUsers
])->validate();
$user = User::create([
'email' => $input['email'],
'email' => $input['email'],
'password' => bcrypt($input['password']),
]);
@@ -50,7 +50,7 @@ class CreateNewUser implements CreatesNewUsers
$user
->settings()
->create([
'name' => $input['name'],
'name' => $input['name'],
'storage_capacity' => $settings['storage_default'],
]);

View File

@@ -21,7 +21,7 @@ class UpdateUserPassword implements UpdatesUserPasswords
{
Validator::make($input, [
'current_password' => ['required', 'string'],
'password' => $this->passwordRules(),
'password' => $this->passwordRules(),
])->after(function ($validator) use ($user, $input) {
if (! isset($input['current_password']) || ! Hash::check($input['current_password'], $user->password)) {
$validator->errors()->add('current_password', __('The provided password does not match your current password.'));

View File

@@ -34,7 +34,7 @@ class UpdateUserProfileInformation implements UpdatesUserProfileInformation
$this->updateVerifiedUser($user, $input);
} else {
$user->forceFill([
'name' => $input['name'],
'name' => $input['name'],
'email' => $input['email'],
])->save();
}
@@ -50,8 +50,8 @@ class UpdateUserProfileInformation implements UpdatesUserProfileInformation
protected function updateVerifiedUser($user, array $input)
{
$user->forceFill([
'name' => $input['name'],
'email' => $input['email'],
'name' => $input['name'],
'email' => $input['email'],
'email_verified_at' => null,
])->save();

View File

@@ -87,24 +87,24 @@ class SetupDevEnvironment extends Command
private function create_admin(): void
{
$user = User::forceCreate([
'role' => 'admin',
'email' => 'howdy@hi5ve.digital',
'role' => 'admin',
'email' => 'howdy@hi5ve.digital',
'password' => bcrypt('vuefilemanager'),
]);
$user
->settings()
->create([
'avatar' => 'avatars/avatar-01.png',
'avatar' => 'avatars/avatar-01.png',
'storage_capacity' => 5,
'name' => 'Jane Doe',
'address' => $this->faker->address,
'state' => $this->faker->state,
'city' => $this->faker->city,
'postal_code' => $this->faker->postcode,
'country' => $this->faker->randomElement(['SK', 'CZ', 'DE', 'FR']),
'phone_number' => $this->faker->phoneNumber,
'timezone' => $this->faker->randomElement(['+1.0', '+2.0', '+3.0']),
'name' => 'Jane Doe',
'address' => $this->faker->address,
'state' => $this->faker->state,
'city' => $this->faker->city,
'postal_code' => $this->faker->postcode,
'country' => $this->faker->randomElement(['SK', 'CZ', 'DE', 'FR']),
'phone_number' => $this->faker->phoneNumber,
'timezone' => $this->faker->randomElement(['+1.0', '+2.0', '+3.0']),
]);
Storage::putFileAs('avatars', storage_path('demo/avatars/avatar-01.png'), 'avatar-01.png', 'private');
@@ -127,24 +127,24 @@ class SetupDevEnvironment extends Command
],
])->each(function ($user) {
$newbie = User::forceCreate([
'role' => 'user',
'email' => $this->faker->email,
'role' => 'user',
'email' => $this->faker->email,
'password' => bcrypt('vuefilemanager'),
]);
$newbie
->settings()
->create([
'avatar' => "avatars/{$user['avatar']}",
'avatar' => "avatars/{$user['avatar']}",
'storage_capacity' => 5,
'name' => $this->faker->name,
'address' => $this->faker->address,
'state' => $this->faker->state,
'city' => $this->faker->city,
'postal_code' => $this->faker->postcode,
'country' => $this->faker->randomElement(['SK', 'CZ', 'DE', 'FR']),
'phone_number' => $this->faker->phoneNumber,
'timezone' => $this->faker->randomElement(['+1.0', '+2.0', '+3.0']),
'name' => $this->faker->name,
'address' => $this->faker->address,
'state' => $this->faker->state,
'city' => $this->faker->city,
'postal_code' => $this->faker->postcode,
'country' => $this->faker->randomElement(['SK', 'CZ', 'DE', 'FR']),
'phone_number' => $this->faker->phoneNumber,
'timezone' => $this->faker->randomElement(['+1.0', '+2.0', '+3.0']),
]);
Storage::putFileAs('avatars', storage_path("demo/avatars/{$user['avatar']}"), $user['avatar'], 'private');
@@ -165,14 +165,14 @@ class SetupDevEnvironment extends Command
$shared_folder = Folder::factory(Folder::class)
->create([
'user_id' => $user->id,
'author' => 'user',
'name' => 'Shared Folder',
'emoji' => [
'codes' => '1F680',
'char' => '🚀',
'name' => 'rocket',
'author' => 'user',
'name' => 'Shared Folder',
'emoji' => [
'codes' => '1F680',
'char' => '🚀',
'name' => 'rocket',
'category' => 'Travel & Places (transport-air)',
'group' => 'Travel & Places',
'group' => 'Travel & Places',
'subgroup' => 'transport-air',
],
'created_at' => now(),
@@ -180,35 +180,35 @@ class SetupDevEnvironment extends Command
Share::factory(Share::class)
->create([
'type' => 'folder',
'item_id' => $shared_folder->id,
'user_id' => $user->id,
'permission' => 'editor',
'type' => 'folder',
'item_id' => $shared_folder->id,
'user_id' => $user->id,
'permission' => 'editor',
'is_protected' => false,
'password' => null,
'expire_in' => null,
'password' => null,
'expire_in' => null,
]);
$peters_files = Folder::factory(Folder::class)
->create([
'user_id' => $user->id,
'user_id' => $user->id,
'parent_id' => $shared_folder->id,
'author' => 'visitor',
'name' => "Peter's Files",
'author' => 'visitor',
'name' => "Peter's Files",
]);
// 2.
$random_pics = Folder::factory(Folder::class)
->create([
'user_id' => $user->id,
'author' => 'user',
'name' => 'Random Pics',
'emoji' => [
'codes' => '1F4F7',
'char' => '📷',
'name' => 'camera',
'author' => 'user',
'name' => 'Random Pics',
'emoji' => [
'codes' => '1F4F7',
'char' => '📷',
'name' => 'camera',
'category' => 'Objects (light & video)',
'group' => 'Objects',
'group' => 'Objects',
'subgroup' => 'light & video',
],
'created_at' => now()->subMinutes(1),
@@ -216,32 +216,32 @@ class SetupDevEnvironment extends Command
$nature = Folder::factory(Folder::class)
->create([
'user_id' => $user->id,
'user_id' => $user->id,
'parent_id' => $random_pics->id,
'author' => 'user',
'name' => 'Nature',
'emoji' => [
'codes' => '26F0',
'char' => '⛰',
'name' => 'mountain',
'author' => 'user',
'name' => 'Nature',
'emoji' => [
'codes' => '26F0',
'char' => '⛰',
'name' => 'mountain',
'category' => 'Travel & Places (place-geographic)',
'group' => 'Travel & Places',
'group' => 'Travel & Places',
'subgroup' => 'place-geographic',
],
]);
$apartments = Folder::factory(Folder::class)
->create([
'user_id' => $user->id,
'user_id' => $user->id,
'parent_id' => $random_pics->id,
'author' => 'user',
'name' => 'Apartments',
'emoji' => [
'codes' => '1F3E0',
'char' => '🏠',
'name' => 'house',
'author' => 'user',
'name' => 'Apartments',
'emoji' => [
'codes' => '1F3E0',
'char' => '🏠',
'name' => 'house',
'category' => 'Travel & Places (place-building)',
'group' => 'Travel & Places',
'group' => 'Travel & Places',
'subgroup' => 'place-building',
],
]);
@@ -249,87 +249,87 @@ class SetupDevEnvironment extends Command
// 3.
$playable_media = Folder::factory(Folder::class)
->create([
'user_id' => $user->id,
'author' => 'user',
'name' => 'Playable Media',
'user_id' => $user->id,
'author' => 'user',
'name' => 'Playable Media',
'created_at' => now()->subMinutes(2),
]);
$video = Folder::factory(Folder::class)
->create([
'user_id' => $user->id,
'user_id' => $user->id,
'parent_id' => $playable_media->id,
'author' => 'user',
'name' => 'Video',
'author' => 'user',
'name' => 'Video',
]);
$audio = Folder::factory(Folder::class)
->create([
'user_id' => $user->id,
'user_id' => $user->id,
'parent_id' => $playable_media->id,
'author' => 'user',
'name' => 'Audio',
'author' => 'user',
'name' => 'Audio',
]);
// 4.
$multi_level = Folder::factory(Folder::class)
->create([
'user_id' => $user->id,
'author' => 'user',
'name' => 'Multi Level Folder',
'user_id' => $user->id,
'author' => 'user',
'name' => 'Multi Level Folder',
'created_at' => now()->subMinutes(3),
]);
$first_level = Folder::factory(Folder::class)
->create([
'user_id' => $user->id,
'user_id' => $user->id,
'parent_id' => $multi_level->id,
'author' => 'user',
'name' => 'First Level',
'author' => 'user',
'name' => 'First Level',
]);
$second_level = Folder::factory(Folder::class)
->create([
'user_id' => $user->id,
'user_id' => $user->id,
'parent_id' => $first_level->id,
'author' => 'user',
'name' => 'Second Level',
'author' => 'user',
'name' => 'Second Level',
]);
$third_level = Folder::factory(Folder::class)
->create([
'user_id' => $user->id,
'user_id' => $user->id,
'parent_id' => $second_level->id,
'author' => 'user',
'name' => 'Third Level',
'author' => 'user',
'name' => 'Third Level',
]);
// 5.
$documents = Folder::factory(Folder::class)
->create([
'user_id' => $user->id,
'author' => 'user',
'name' => 'Documents',
'user_id' => $user->id,
'author' => 'user',
'name' => 'Documents',
'created_at' => now()->subMinutes(4),
]);
Share::factory(Share::class)
->create([
'type' => 'folder',
'item_id' => $documents->id,
'user_id' => $user->id,
'permission' => 'editor',
'type' => 'folder',
'item_id' => $documents->id,
'user_id' => $user->id,
'permission' => 'editor',
'is_protected' => false,
'password' => null,
'expire_in' => null,
'password' => null,
'expire_in' => null,
]);
// 6.
$videohive = Folder::factory(Folder::class)
->create([
'user_id' => $user->id,
'author' => 'user',
'name' => 'Videohive by MakingCG',
'user_id' => $user->id,
'author' => 'user',
'name' => 'Videohive by MakingCG',
'created_at' => now()->subMinutes(5),
]);
@@ -345,22 +345,22 @@ class SetupDevEnvironment extends Command
// Get documents to root directory
collect([
[
'name' => 'Random Document',
'name' => 'Random Document',
'basename' => 'Licence.pdf',
'mimetype' => 'pdf',
],
[
'name' => 'School Report',
'name' => 'School Report',
'basename' => 'Project Notes.pdf',
'mimetype' => 'pdf',
],
[
'name' => 'Personal Savings',
'name' => 'Personal Savings',
'basename' => 'School Report.pages',
'mimetype' => 'pages',
],
[
'name' => 'Top Secret Files',
'name' => 'Top Secret Files',
'basename' => 'Stories of the Night Skies.pages',
'mimetype' => 'pages',
],
@@ -373,14 +373,14 @@ class SetupDevEnvironment extends Command
// Create file record
File::create([
'folder_id' => null,
'user_id' => $user->id,
'name' => $file['name'],
'basename' => $basename,
'type' => 'file',
'author' => 'user',
'mimetype' => $file['mimetype'],
'filesize' => rand(1000000, 4000000),
'folder_id' => null,
'user_id' => $user->id,
'name' => $file['name'],
'basename' => $basename,
'type' => 'file',
'author' => 'user',
'mimetype' => $file['mimetype'],
'filesize' => rand(1000000, 4000000),
'created_at' => now()->subMinutes(rand(1, 5)),
]);
});
@@ -388,22 +388,22 @@ class SetupDevEnvironment extends Command
// Get documents to documents folder
collect([
[
'name' => 'Home Improvement',
'name' => 'Home Improvement',
'basename' => 'Licence.pdf',
'mimetype' => 'pdf',
],
[
'name' => 'Project Notes',
'name' => 'Project Notes',
'basename' => 'Project Notes.pdf',
'mimetype' => 'pdf',
],
[
'name' => 'Personal Savings',
'name' => 'Personal Savings',
'basename' => 'School Report.pages',
'mimetype' => 'pages',
],
[
'name' => 'License',
'name' => 'License',
'basename' => 'Stories of the Night Skies.pages',
'mimetype' => 'pages',
],
@@ -416,14 +416,14 @@ class SetupDevEnvironment extends Command
// Create file record
File::create([
'folder_id' => $documents->id,
'user_id' => $user->id,
'name' => $file['name'],
'basename' => $basename,
'type' => 'file',
'author' => 'user',
'mimetype' => $file['mimetype'],
'filesize' => rand(1000000, 4000000),
'folder_id' => $documents->id,
'user_id' => $user->id,
'name' => $file['name'],
'basename' => $basename,
'type' => 'file',
'author' => 'user',
'mimetype' => $file['mimetype'],
'filesize' => rand(1000000, 4000000),
'created_at' => now()->subMinutes(rand(1, 5)),
]);
});
@@ -431,12 +431,12 @@ class SetupDevEnvironment extends Command
// Get documents to shared folder
collect([
[
'name' => 'Home plan',
'name' => 'Home plan',
'basename' => 'Licence.pdf',
'mimetype' => 'pdf',
],
[
'name' => 'Software Licence',
'name' => 'Software Licence',
'basename' => 'Project Notes.pdf',
'mimetype' => 'pdf',
],
@@ -449,14 +449,14 @@ class SetupDevEnvironment extends Command
// Create file record
File::create([
'folder_id' => $shared_folder->id,
'user_id' => $user->id,
'name' => $file['name'],
'basename' => $basename,
'type' => 'file',
'author' => 'user',
'mimetype' => $file['mimetype'],
'filesize' => rand(1000000, 4000000),
'folder_id' => $shared_folder->id,
'user_id' => $user->id,
'name' => $file['name'],
'basename' => $basename,
'type' => 'file',
'author' => 'user',
'mimetype' => $file['mimetype'],
'filesize' => rand(1000000, 4000000),
'created_at' => now()->subMinutes(rand(1, 5)),
]);
});
@@ -464,37 +464,37 @@ class SetupDevEnvironment extends Command
// Get documents to peter's files folder
collect([
[
'name' => 'Project Backup',
'name' => 'Project Backup',
'basename' => 'Licence.pdf',
'mimetype' => 'pdf',
],
[
'name' => 'Yearly report',
'name' => 'Yearly report',
'basename' => 'Project Notes.pdf',
'mimetype' => 'pdf',
],
[
'name' => 'Work Update',
'name' => 'Work Update',
'basename' => 'School Report.pages',
'mimetype' => 'pages',
],
[
'name' => 'Person Writing on Notebook',
'name' => 'Person Writing on Notebook',
'basename' => 'Stories of the Night Skies.pages',
'mimetype' => 'pages',
],
[
'name' => 'Blank Business Composition Computer',
'name' => 'Blank Business Composition Computer',
'basename' => 'Licence.pdf',
'mimetype' => 'pdf',
],
[
'name' => '2020 April - Export',
'name' => '2020 April - Export',
'basename' => 'Project Notes.pdf',
'mimetype' => 'pdf',
],
[
'name' => 'Ballpen Blur Close Up Computer',
'name' => 'Ballpen Blur Close Up Computer',
'basename' => 'School Report.pages',
'mimetype' => 'pages',
],
@@ -507,14 +507,14 @@ class SetupDevEnvironment extends Command
// Create file record
File::create([
'folder_id' => $peters_files->id,
'user_id' => $user->id,
'name' => $file['name'],
'basename' => $basename,
'type' => 'file',
'author' => 'visitor',
'mimetype' => $file['mimetype'],
'filesize' => rand(1000000, 4000000),
'folder_id' => $peters_files->id,
'user_id' => $user->id,
'name' => $file['name'],
'basename' => $basename,
'type' => 'file',
'author' => 'visitor',
'mimetype' => $file['mimetype'],
'filesize' => rand(1000000, 4000000),
'created_at' => now()->subMinutes(rand(1, 5)),
]);
});
@@ -534,14 +534,14 @@ class SetupDevEnvironment extends Command
// Create file record
File::create([
'folder_id' => $videohive->id,
'user_id' => $user->id,
'name' => $file,
'basename' => $basename,
'type' => 'video',
'author' => 'user',
'mimetype' => 'mp4',
'filesize' => rand(1000000, 4000000),
'folder_id' => $videohive->id,
'user_id' => $user->id,
'name' => $file,
'basename' => $basename,
'type' => 'video',
'author' => 'user',
'mimetype' => 'mp4',
'filesize' => rand(1000000, 4000000),
'created_at' => now()->subMinutes(rand(1, 5)),
]);
});
@@ -558,14 +558,14 @@ class SetupDevEnvironment extends Command
// Create file record
File::create([
'folder_id' => $video->id,
'user_id' => $user->id,
'name' => $file,
'basename' => $basename,
'type' => 'video',
'author' => 'user',
'mimetype' => 'mp4',
'filesize' => rand(1000000, 4000000),
'folder_id' => $video->id,
'user_id' => $user->id,
'name' => $file,
'basename' => $basename,
'type' => 'video',
'author' => 'user',
'mimetype' => 'mp4',
'filesize' => rand(1000000, 4000000),
'created_at' => now()->subMinutes(rand(1, 5)),
]);
});
@@ -582,14 +582,14 @@ class SetupDevEnvironment extends Command
// Create file record
File::create([
'folder_id' => $audio->id,
'user_id' => $user->id,
'name' => $file,
'basename' => $basename,
'type' => 'audio',
'author' => 'user',
'mimetype' => 'mp3',
'filesize' => rand(1000000, 4000000),
'folder_id' => $audio->id,
'user_id' => $user->id,
'name' => $file,
'basename' => $basename,
'type' => 'audio',
'author' => 'user',
'mimetype' => 'mp3',
'filesize' => rand(1000000, 4000000),
'created_at' => now()->subMinutes(rand(1, 5)),
]);
});
@@ -618,15 +618,15 @@ class SetupDevEnvironment extends Command
// Create file record
File::create([
'folder_id' => null,
'user_id' => $user->id,
'name' => $file,
'basename' => $basename,
'type' => 'image',
'author' => 'user',
'mimetype' => 'jpg',
'filesize' => rand(1000000, 4000000),
'thumbnail' => "thumbnail-$basename",
'folder_id' => null,
'user_id' => $user->id,
'name' => $file,
'basename' => $basename,
'type' => 'image',
'author' => 'user',
'mimetype' => 'jpg',
'filesize' => rand(1000000, 4000000),
'thumbnail' => "thumbnail-$basename",
'created_at' => now()->subMinutes(rand(1, 5)),
]);
});
@@ -650,15 +650,15 @@ class SetupDevEnvironment extends Command
// Create file record
File::create([
'folder_id' => $apartments->id,
'user_id' => $user->id,
'name' => $file,
'basename' => $basename,
'type' => 'image',
'author' => 'user',
'mimetype' => 'jpg',
'filesize' => rand(1000000, 4000000),
'thumbnail' => "thumbnail-$basename",
'folder_id' => $apartments->id,
'user_id' => $user->id,
'name' => $file,
'basename' => $basename,
'type' => 'image',
'author' => 'user',
'mimetype' => 'jpg',
'filesize' => rand(1000000, 4000000),
'thumbnail' => "thumbnail-$basename",
'created_at' => now()->subMinutes(rand(1, 5)),
]);
});
@@ -686,15 +686,15 @@ class SetupDevEnvironment extends Command
// Create file record
File::create([
'folder_id' => $nature->id,
'user_id' => $user->id,
'name' => $file,
'basename' => $basename,
'type' => 'image',
'author' => 'user',
'mimetype' => 'jpg',
'filesize' => rand(1000000, 4000000),
'thumbnail' => "thumbnail-$basename",
'folder_id' => $nature->id,
'user_id' => $user->id,
'name' => $file,
'basename' => $basename,
'type' => 'image',
'author' => 'user',
'mimetype' => 'jpg',
'filesize' => rand(1000000, 4000000),
'thumbnail' => "thumbnail-$basename",
'created_at' => now()->subMinutes(rand(1, 5)),
]);
});
@@ -712,13 +712,13 @@ class SetupDevEnvironment extends Command
$images->each(function ($id) use ($user) {
Share::create([
'user_id' => $user->id,
'item_id' => $id,
'type' => 'file',
'user_id' => $user->id,
'item_id' => $id,
'type' => 'file',
'is_protected' => false,
'permission' => 'editor',
'password' => null,
'expire_in' => null,
'permission' => 'editor',
'password' => null,
'expire_in' => null,
]);
});
@@ -729,13 +729,13 @@ class SetupDevEnvironment extends Command
$files->each(function ($id) use ($user) {
Share::create([
'user_id' => $user->id,
'item_id' => $id,
'type' => 'file',
'user_id' => $user->id,
'item_id' => $id,
'type' => 'file',
'is_protected' => false,
'permission' => 'editor',
'password' => null,
'expire_in' => null,
'permission' => 'editor',
'password' => null,
'expire_in' => null,
]);
});
}
@@ -748,108 +748,108 @@ class SetupDevEnvironment extends Command
// Get options
collect([
[
'name' => 'setup_wizard_database',
'name' => 'setup_wizard_database',
'value' => 1,
],
[
'name' => 'app_title',
'name' => 'app_title',
'value' => 'VueFileManager',
],
[
'name' => 'app_description',
'name' => 'app_description',
'value' => 'Your self-hosted storage cloud software powered by Laravel and Vue',
],
[
'name' => 'app_logo',
'name' => 'app_logo',
'value' => 'system/logo.svg',
],
[
'name' => 'app_logo_horizontal',
'name' => 'app_logo_horizontal',
'value' => 'system/logo-horizontal.svg',
],
[
'name' => 'app_favicon',
'name' => 'app_favicon',
'value' => 'system/favicon.png',
],
[
'name' => 'app_og_image',
'name' => 'app_og_image',
'value' => 'system/og-image.jpg',
],
[
'name' => 'app_touch_icon',
'name' => 'app_touch_icon',
'value' => 'system/touch-icon.png',
],
[
'name' => 'google_analytics',
'name' => 'google_analytics',
'value' => '',
],
[
'name' => 'contact_email',
'name' => 'contact_email',
'value' => '',
],
[
'name' => 'registration',
'name' => 'registration',
'value' => 1,
],
[
'name' => 'payments_active',
'name' => 'payments_active',
'value' => 1,
],
[
'name' => 'storage_limitation',
'name' => 'storage_limitation',
'value' => 1,
],
[
'name' => 'storage_default',
'name' => 'storage_default',
'value' => 5,
],
[
'name' => 'setup_wizard_success',
'name' => 'setup_wizard_success',
'value' => 1,
],
[
'name' => 'license',
'name' => 'license',
'value' => $this->license,
],
[
'name' => 'purchase_code',
'name' => 'purchase_code',
'value' => '26b889eb-3602-4bf2-beb3-3sc378fcf484',
],
[
'name' => 'billing_address',
'name' => 'billing_address',
'value' => 'Palo Alto 20',
],
[
'name' => 'billing_city',
'name' => 'billing_city',
'value' => 'Palo Alto',
],
[
'name' => 'billing_country',
'name' => 'billing_country',
'value' => 'US',
],
[
'name' => 'billing_name',
'name' => 'billing_name',
'value' => 'VueFileManager Inc.',
],
[
'name' => 'billing_phone_number',
'name' => 'billing_phone_number',
'value' => '312343141243214',
],
[
'name' => 'billing_postal_code',
'name' => 'billing_postal_code',
'value' => '43213',
],
[
'name' => 'billing_state',
'name' => 'billing_state',
'value' => 'California',
],
[
'name' => 'billing_vat_number',
'name' => 'billing_vat_number',
'value' => '41241241234',
],
])->each(function ($col) {
Setting::forceCreate([
'name' => $col['name'],
'name' => $col['name'],
'value' => $col['value'],
]);
});

View File

@@ -0,0 +1,100 @@
<?php
namespace App\Console\Commands;
use App\Models\Setting;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Storage;
class SetupOasisEnvironment extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'setup:oasis';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Setup Oasis demo content';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
$this->info('Setting up Oasis environment');
$this->set_oasis_data();
$this->info('Dispatching jobs...');
$this->call('queue:work', [
'--stop-when-empty' => true,
]);
$this->info('Everything is done, congratulations! 🥳🥳🥳');
}
public function set_oasis_data()
{
Setting::updateOrCreate([
'name' => 'app_color',
], [
'value' => '#ae5fec',
]);
// Get system images
collect(['logo.png', 'logo-horizontal.png', 'favicon.png', 'oasis-og-image.jpg'])
->each(function ($file) {
Storage::putFileAs('system', storage_path("demo/oasis/$file"), $file, 'private');
});
collect([
[
'name' => 'app_title',
'value' => 'Oasis',
],
[
'name' => 'app_description',
'value' => 'Chytrý, bezpečný, pohodlný šanon vždy s Vámi.',
],
[
'name' => 'app_logo',
'value' => 'system/logo.png',
],
[
'name' => 'app_logo_horizontal',
'value' => 'system/logo-horizontal.png',
],
[
'name' => 'app_favicon',
'value' => 'system/favicon.png',
],
[
'name' => 'app_og_image',
'value' => 'system/oasis-og-image.jpg',
],
])->each(function ($option) {
Setting::updateOrCreate([
'name' => $option['name'],
], [
'value' => $option['value'],
]);
});
}
}

View File

@@ -69,104 +69,104 @@ class SetupProdEnvironment extends Command
// Get options
collect([
[
'name' => 'setup_wizard_database',
'name' => 'setup_wizard_database',
'value' => 1,
],
[
'name' => 'app_title',
'name' => 'app_title',
'value' => 'VueFileManager',
],
[
'name' => 'app_description',
'name' => 'app_description',
'value' => 'Your self-hosted storage cloud software powered by Laravel and Vue',
],
[
'name' => 'app_logo',
'name' => 'app_logo',
'value' => null,
],
[
'name' => 'app_logo_horizontal',
'name' => 'app_logo_horizontal',
'value' => null,
],
[
'name' => 'app_favicon',
'name' => 'app_favicon',
'value' => null,
],
[
'name' => 'app_og_image',
'name' => 'app_og_image',
'value' => null,
],
[
'name' => 'app_touch_icon',
'name' => 'app_touch_icon',
'value' => null,
],
[
'name' => 'google_analytics',
'name' => 'google_analytics',
'value' => null,
],
[
'name' => 'contact_email',
'name' => 'contact_email',
'value' => null,
],
[
'name' => 'registration',
'name' => 'registration',
'value' => 0,
],
[
'name' => 'storage_limitation',
'name' => 'storage_limitation',
'value' => 1,
],
[
'name' => 'storage_default',
'name' => 'storage_default',
'value' => 5,
],
[
'name' => 'setup_wizard_success',
'name' => 'setup_wizard_success',
'value' => 1,
],
[
'name' => 'license',
'name' => 'license',
'value' => $this->license,
],
[
'name' => 'purchase_code',
'name' => 'purchase_code',
'value' => '26b889eb-3602-4bf2-beb3-3sc378fcf484',
],
[
'name' => 'billing_address',
'name' => 'billing_address',
'value' => null,
],
[
'name' => 'billing_city',
'name' => 'billing_city',
'value' => null,
],
[
'name' => 'billing_country',
'name' => 'billing_country',
'value' => null,
],
[
'name' => 'billing_name',
'name' => 'billing_name',
'value' => null,
],
[
'name' => 'billing_phone_number',
'name' => 'billing_phone_number',
'value' => null,
],
[
'name' => 'billing_postal_code',
'name' => 'billing_postal_code',
'value' => null,
],
[
'name' => 'billing_state',
'name' => 'billing_state',
'value' => null,
],
[
'name' => 'billing_vat_number',
'name' => 'billing_vat_number',
'value' => null,
],
])->each(function ($col) {
Setting::forceCreate([
'name' => $col['name'],
'name' => $col['name'],
'value' => $col['value'],
]);
});
@@ -178,8 +178,8 @@ class SetupProdEnvironment extends Command
private function create_admin(): void
{
$user = User::forceCreate([
'role' => 'admin',
'email' => 'howdy@hi5ve.digital',
'role' => 'admin',
'email' => 'howdy@hi5ve.digital',
'password' => bcrypt('vuefilemanager'),
]);
@@ -187,7 +187,7 @@ class SetupProdEnvironment extends Command
->settings()
->create([
'storage_capacity' => 5,
'name' => 'Admin',
'name' => 'Admin',
]);
// Show user credentials

View File

@@ -2,9 +2,11 @@
namespace App\Console;
use App\Services\SchedulerService;
use App\Services\Oasis\OasisService;
use Illuminate\Console\Scheduling\Schedule;
use App\Console\Commands\SetupDevEnvironment;
use App\Console\Commands\SetupProdEnvironment;
use App\Console\Commands\SetupOasisEnvironment;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
@@ -17,6 +19,7 @@ class Kernel extends ConsoleKernel
protected $commands = [
SetupDevEnvironment::class,
SetupProdEnvironment::class,
SetupOasisEnvironment::class,
];
/**
@@ -41,6 +44,11 @@ class Kernel extends ConsoleKernel
}
})->everySixHours();
// Oasis Drive
$schedule->call(function () {
resolve(OasisService::class)->order_reminder();
})->hourly();
// Run queue jobs every minute
$schedule->command('queue:work --stop-when-empty')
->everyMinute()

View File

@@ -34,10 +34,10 @@ class DashboardController extends Controller
)->format();
return [
'license' => get_setting('license'),
'app_version' => config('vuefilemanager.version'),
'total_users' => User::count(),
'total_used_space' => $storage_usage,
'license' => get_setting('license'),
'app_version' => config('vuefilemanager.version'),
'total_users' => User::count(),
'total_used_space' => $storage_usage,
'total_premium_users' => $premium_users,
];
}

View File

@@ -53,7 +53,7 @@ class LanguageController extends Controller
abort_if(is_demo(), 204, 'Done.');
$language = Language::create([
'name' => $request->input('name'),
'name' => $request->input('name'),
'locale' => $request->input('locale'),
]);

View File

@@ -84,11 +84,11 @@ class SettingController extends Controller
if (! app()->runningUnitTests()) {
setEnvironmentValue([
'MAIL_DRIVER' => $request->driver,
'MAIL_HOST' => $request->host,
'MAIL_PORT' => $request->port,
'MAIL_USERNAME' => $request->username,
'MAIL_PASSWORD' => $request->password,
'MAIL_DRIVER' => $request->driver,
'MAIL_HOST' => $request->host,
'MAIL_PORT' => $request->port,
'MAIL_USERNAME' => $request->username,
'MAIL_PASSWORD' => $request->password,
'MAIL_ENCRYPTION' => $request->encryption,
]);
@@ -127,20 +127,20 @@ class SettingController extends Controller
// Get options
collect([
[
'name' => 'stripe_currency',
'name' => 'stripe_currency',
'value' => $request->currency,
],
[
'name' => 'payments_configured',
'name' => 'payments_configured',
'value' => 1,
],
[
'name' => 'payments_active',
'name' => 'payments_active',
'value' => 1,
],
])->each(function ($col) {
Setting::forceCreate([
'name' => $col['name'],
'name' => $col['name'],
'value' => $col['value'],
]);
});
@@ -148,9 +148,9 @@ class SettingController extends Controller
if (! app()->runningUnitTests()) {
// Set stripe credentials to .env
setEnvironmentValue([
'CASHIER_CURRENCY' => $request->currency,
'STRIPE_KEY' => $request->key,
'STRIPE_SECRET' => $request->secret,
'CASHIER_CURRENCY' => $request->currency,
'STRIPE_KEY' => $request->key,
'STRIPE_SECRET' => $request->secret,
'STRIPE_WEBHOOK_SECRET' => $request->webhookSecret,
]);

View File

@@ -177,8 +177,8 @@ class UserController extends Controller
{
// Create user
$user = User::forceCreate([
'role' => $request->role,
'email' => $request->email,
'role' => $request->role,
'email' => $request->email,
'password' => bcrypt($request->password),
]);
@@ -187,8 +187,8 @@ class UserController extends Controller
$user
->settings()
->create([
'name' => $request->name,
'avatar' => store_avatar($request, 'avatar'),
'name' => $request->name,
'avatar' => store_avatar($request, 'avatar'),
'storage_capacity' => $request->storage_capacity,
]);

View File

@@ -90,11 +90,11 @@ class AppFunctionsController extends Controller
return view('vuefilemanager.crawler.og-view')
->with('settings', get_settings_in_json())
->with('metadata', [
'url' => url('/share', ['token' => $shared->token]),
'url' => url('/share', ['token' => $shared->token]),
'is_protected' => $shared->is_protected,
'user' => $shared->user->settings->name,
'name' => $item->name,
'size' => $shared->type === 'folder'
'user' => $shared->user->settings->name,
'name' => $item->name,
'size' => $shared->type === 'folder'
? $item->items
: $item->filesize,
'thumbnail' => $item->thumbnail ?? null,

View File

@@ -84,11 +84,11 @@ class SetupWizardController extends Controller
setEnvironmentValue([
'DB_CONNECTION' => $request->connection,
'DB_HOST' => $request->host,
'DB_PORT' => $request->port,
'DB_DATABASE' => $request->name,
'DB_USERNAME' => $request->username,
'DB_PASSWORD' => $request->password,
'DB_HOST' => $request->host,
'DB_PORT' => $request->port,
'DB_DATABASE' => $request->name,
'DB_USERNAME' => $request->username,
'DB_PASSWORD' => $request->password,
]);
Artisan::call('config:cache');
@@ -104,7 +104,7 @@ class SetupWizardController extends Controller
// Store setup wizard progress
Setting::forceCreate([
'name' => 'setup_wizard_database',
'name' => 'setup_wizard_database',
'value' => 1,
]);
@@ -134,20 +134,20 @@ class SetupWizardController extends Controller
// Set settings
collect([
[
'name' => 'stripe_currency',
'name' => 'stripe_currency',
'value' => $request->currency,
],
[
'name' => 'payments_configured',
'name' => 'payments_configured',
'value' => 1,
],
[
'name' => 'payments_active',
'name' => 'payments_active',
'value' => 1,
],
])->each(function ($col) {
Setting::forceCreate([
'name' => $col['name'],
'name' => $col['name'],
'value' => $col['value'],
]);
});
@@ -155,9 +155,9 @@ class SetupWizardController extends Controller
if (! app()->runningUnitTests()) {
// Set stripe credentials to .env
setEnvironmentValue([
'CASHIER_CURRENCY' => $request->currency,
'STRIPE_KEY' => $request->key,
'STRIPE_SECRET' => $request->secret,
'CASHIER_CURRENCY' => $request->currency,
'STRIPE_KEY' => $request->key,
'STRIPE_SECRET' => $request->secret,
'STRIPE_WEBHOOK_SECRET' => $request->webhookSecret,
]);
@@ -179,40 +179,40 @@ class SetupWizardController extends Controller
// Get options
collect([
[
'name' => 'billing_phone_number',
'name' => 'billing_phone_number',
'value' => $request->billing_phone_number,
],
[
'name' => 'billing_postal_code',
'name' => 'billing_postal_code',
'value' => $request->billing_postal_code,
],
[
'name' => 'billing_vat_number',
'name' => 'billing_vat_number',
'value' => $request->billing_vat_number,
],
[
'name' => 'billing_address',
'name' => 'billing_address',
'value' => $request->billing_address,
],
[
'name' => 'billing_country',
'name' => 'billing_country',
'value' => $request->billing_country,
],
[
'name' => 'billing_state',
'name' => 'billing_state',
'value' => $request->billing_state,
],
[
'name' => 'billing_city',
'name' => 'billing_city',
'value' => $request->billing_city,
],
[
'name' => 'billing_name',
'name' => 'billing_name',
'value' => $request->billing_name,
],
])->each(function ($col) {
Setting::forceCreate([
'name' => $col['name'],
'name' => $col['name'],
'value' => $col['value'],
]);
});
@@ -253,43 +253,43 @@ class SetupWizardController extends Controller
'FILESYSTEM_DRIVER' => 'local',
],
's3' => [
'FILESYSTEM_DRIVER' => $request->storage['driver'] ?? null,
'AWS_ACCESS_KEY_ID' => $request->storage['key'] ?? null,
'FILESYSTEM_DRIVER' => $request->storage['driver'] ?? null,
'AWS_ACCESS_KEY_ID' => $request->storage['key'] ?? null,
'AWS_SECRET_ACCESS_KEY' => $request->storage['secret'] ?? null,
'AWS_DEFAULT_REGION' => $request->storage['region'] ?? null,
'AWS_BUCKET' => $request->storage['bucket'] ?? null,
'AWS_DEFAULT_REGION' => $request->storage['region'] ?? null,
'AWS_BUCKET' => $request->storage['bucket'] ?? null,
],
'spaces' => [
'FILESYSTEM_DRIVER' => $request->storage['driver'] ?? null,
'DO_SPACES_KEY' => $request->storage['key'] ?? null,
'DO_SPACES_SECRET' => $request->storage['secret'] ?? null,
'FILESYSTEM_DRIVER' => $request->storage['driver'] ?? null,
'DO_SPACES_KEY' => $request->storage['key'] ?? null,
'DO_SPACES_SECRET' => $request->storage['secret'] ?? null,
'DO_SPACES_ENDPOINT' => $request->storage['endpoint'] ?? null,
'DO_SPACES_REGION' => $request->storage['region'] ?? null,
'DO_SPACES_BUCKET' => $request->storage['bucket'] ?? null,
'DO_SPACES_REGION' => $request->storage['region'] ?? null,
'DO_SPACES_BUCKET' => $request->storage['bucket'] ?? null,
],
'wasabi' => [
'FILESYSTEM_DRIVER' => $request->storage['driver'] ?? null,
'WASABI_KEY' => $request->storage['key'] ?? null,
'WASABI_SECRET' => $request->storage['secret'] ?? null,
'WASABI_ENDPOINT' => $request->storage['endpoint'] ?? null,
'WASABI_REGION' => $request->storage['region'] ?? null,
'WASABI_BUCKET' => $request->storage['bucket'] ?? null,
'WASABI_KEY' => $request->storage['key'] ?? null,
'WASABI_SECRET' => $request->storage['secret'] ?? null,
'WASABI_ENDPOINT' => $request->storage['endpoint'] ?? null,
'WASABI_REGION' => $request->storage['region'] ?? null,
'WASABI_BUCKET' => $request->storage['bucket'] ?? null,
],
'backblaze' => [
'FILESYSTEM_DRIVER' => $request->storage['driver'] ?? null,
'BACKBLAZE_KEY' => $request->storage['key'] ?? null,
'BACKBLAZE_SECRET' => $request->storage['secret'] ?? null,
'FILESYSTEM_DRIVER' => $request->storage['driver'] ?? null,
'BACKBLAZE_KEY' => $request->storage['key'] ?? null,
'BACKBLAZE_SECRET' => $request->storage['secret'] ?? null,
'BACKBLAZE_ENDPOINT' => $request->storage['endpoint'] ?? null,
'BACKBLAZE_REGION' => $request->storage['region'] ?? null,
'BACKBLAZE_BUCKET' => $request->storage['bucket'] ?? null,
'BACKBLAZE_REGION' => $request->storage['region'] ?? null,
'BACKBLAZE_BUCKET' => $request->storage['bucket'] ?? null,
],
'oss' => [
'FILESYSTEM_DRIVER' => $request->storage['driver'] ?? null,
'OSS_ACCESS_KEY_ID' => $request->storage['key'] ?? null,
'FILESYSTEM_DRIVER' => $request->storage['driver'] ?? null,
'OSS_ACCESS_KEY_ID' => $request->storage['key'] ?? null,
'OSS_SECRET_ACCESS_KEY' => $request->storage['secret'] ?? null,
'OSS_ENDPOINT' => $request->storage['endpoint'] ?? null,
'OSS_REGION' => $request->storage['region'] ?? null,
'OSS_BUCKET' => $request->storage['bucket'] ?? null,
'OSS_ENDPOINT' => $request->storage['endpoint'] ?? null,
'OSS_REGION' => $request->storage['region'] ?? null,
'OSS_BUCKET' => $request->storage['bucket'] ?? null,
],
];
@@ -301,11 +301,11 @@ class SetupWizardController extends Controller
// Store credentials for mail
// TODO: add options for mailgun
setEnvironmentValue([
'MAIL_DRIVER' => $request->mail['driver'],
'MAIL_HOST' => $request->mail['host'],
'MAIL_PORT' => $request->mail['port'],
'MAIL_USERNAME' => $request->mail['username'],
'MAIL_PASSWORD' => $request->mail['password'],
'MAIL_DRIVER' => $request->mail['driver'],
'MAIL_HOST' => $request->mail['host'],
'MAIL_PORT' => $request->mail['port'],
'MAIL_USERNAME' => $request->mail['username'],
'MAIL_PASSWORD' => $request->mail['password'],
'MAIL_ENCRYPTION' => $request->mail['encryption'],
]);
@@ -325,56 +325,56 @@ class SetupWizardController extends Controller
// Get options
collect([
[
'name' => 'app_title',
'name' => 'app_title',
'value' => $request->title,
],
[
'name' => 'app_description',
'name' => 'app_description',
'value' => $request->description,
],
[
'name' => 'app_logo',
'name' => 'app_logo',
'value' => store_system_image($request, 'logo'),
],
[
'name' => 'app_logo_horizontal',
'name' => 'app_logo_horizontal',
'value' => store_system_image($request, 'logo_horizontal'),
],
[
'name' => 'app_favicon',
'name' => 'app_favicon',
'value' => store_system_image($request, 'favicon'),
],
[
'name' => 'app_og_image',
'name' => 'app_og_image',
'value' => store_system_image($request, 'og_image'),
],
[
'name' => 'app_touch_icon',
'name' => 'app_touch_icon',
'value' => store_system_image($request, 'touch_icon'),
],
[
'name' => 'google_analytics',
'name' => 'google_analytics',
'value' => $request->googleAnalytics,
],
[
'name' => 'contact_email',
'name' => 'contact_email',
'value' => $request->contactMail,
],
[
'name' => 'registration',
'name' => 'registration',
'value' => $request->userRegistration,
],
[
'name' => 'storage_limitation',
'name' => 'storage_limitation',
'value' => $request->storageLimitation,
],
[
'name' => 'storage_default',
'name' => 'storage_default',
'value' => $request->defaultStorage ?? 5,
],
])->each(function ($col) {
Setting::forceCreate([
'name' => $col['name'],
'name' => $col['name'],
'value' => $col['value'],
]);
});
@@ -399,18 +399,18 @@ class SetupWizardController extends Controller
// Validate request
// TODO: validator do requestu
$request->validate([
'email' => 'required|string|email|unique:users',
'password' => 'required|string|min:6|confirmed',
'name' => 'required|string',
'email' => 'required|string|email|unique:users',
'password' => 'required|string|min:6|confirmed',
'name' => 'required|string',
'purchase_code' => 'required|string',
'license' => 'required|string',
'avatar' => 'sometimes|file',
'license' => 'required|string',
'avatar' => 'sometimes|file',
]);
// Create user
$user = User::forceCreate([
'role' => 'admin',
'email' => $request->email,
'role' => 'admin',
'email' => $request->email,
'password' => bcrypt($request->password),
]);
@@ -418,26 +418,26 @@ class SetupWizardController extends Controller
->settings()
->create([
'storage_capacity' => get_setting('storage_default') ?? 5,
'avatar' => store_avatar($request, 'avatar'),
'name' => $request->name,
'avatar' => store_avatar($request, 'avatar'),
'name' => $request->name,
]);
collect([
[
'name' => 'setup_wizard_success',
'name' => 'setup_wizard_success',
'value' => 1,
],
[
'name' => 'license',
'name' => 'license',
'value' => $request->license,
],
[
'name' => 'purchase_code',
'name' => 'purchase_code',
'value' => $request->purchase_code,
],
])->each(function ($col) {
Setting::forceCreate([
'name' => $col['name'],
'name' => $col['name'],
'value' => $col['value'],
]);
});

View File

@@ -24,7 +24,7 @@ class AuthController extends Controller
}
return [
'name' => $user->settings->name,
'name' => $user->settings->name,
'avatar' => $user->settings->avatar,
];
}

View File

@@ -180,9 +180,9 @@ class BrowseController extends Controller
return [
[
'name' => __t('home'),
'name' => __t('home'),
'location' => 'base',
'folders' => $folders,
'folders' => $folders,
],
];
}

View File

@@ -139,7 +139,7 @@ class EditItemsController extends Controller
$zip = $this->filemanager->zip_folder($id);
return response([
'url' => route('zip', $zip->id),
'url' => route('zip', $zip->id),
'name' => $zip->basename,
], 201);
}
@@ -160,7 +160,7 @@ class EditItemsController extends Controller
$zip = $this->filemanager->zip_files($files);
return response([
'url' => route('zip', $zip->id),
'url' => route('zip', $zip->id),
'name' => $zip->basename,
], 201);
}

View File

@@ -109,10 +109,10 @@ class FileAccessController extends Controller
);
return $disk->download("zip/$zip->basename", $zip->basename, [
'Content-Type' => 'application/zip',
'Content-Length' => $disk->size("zip/$zip->basename"),
'Accept-Ranges' => 'bytes',
'Content-Range' => 'bytes 0-600/' . $disk->size("zip/$zip->basename"),
'Content-Type' => 'application/zip',
'Content-Length' => $disk->size("zip/$zip->basename"),
'Accept-Ranges' => 'bytes',
'Content-Range' => 'bytes 0-600/' . $disk->size("zip/$zip->basename"),
'Content-Disposition' => "attachment; filename=$zip->basename",
]);
}

View File

@@ -40,13 +40,13 @@ class ShareController extends Controller
{
// Create shared options
$shared = Share::create([
'password' => $request->has('password') ? bcrypt($request->password) : null,
'type' => $request->type === 'folder' ? 'folder' : 'file',
'password' => $request->has('password') ? bcrypt($request->password) : null,
'type' => $request->type === 'folder' ? 'folder' : 'file',
'is_protected' => $request->isPassword,
'permission' => $request->permission ?? null,
'item_id' => $id,
'expire_in' => $request->expiration ?? null,
'user_id' => Auth::id(),
'permission' => $request->permission ?? null,
'item_id' => $id,
'expire_in' => $request->expiration ?? null,
'user_id' => Auth::id(),
]);
// Send shared link via email
@@ -78,10 +78,10 @@ class ShareController extends Controller
// Update sharing record
$shared->update([
'permission' => $request->permission,
'permission' => $request->permission,
'is_protected' => $request->protected,
'expire_in' => $request->expiration,
'password' => $request->password ? bcrypt($request->password) : $shared->password,
'expire_in' => $request->expiration,
'password' => $request->password ? bcrypt($request->password) : $shared->password,
]);
// Return shared record

View File

@@ -33,7 +33,7 @@ class TrashController extends Controller
// TODO: zrefaktorovat validator do requestu
$validator = Validator::make($request->input('items'), [
'*.type' => 'required|string',
'*.id' => 'string',
'*.id' => 'string',
]);
// Return error

View File

@@ -0,0 +1,125 @@
<?php
namespace App\Http\Controllers\Oasis;
use Hash;
use Notification;
use App\Models\User;
use Illuminate\Support\Str;
use App\Models\UserSettings;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use App\Services\StripeService;
use App\Http\Controllers\Controller;
use App\Http\Resources\UserResource;
use App\Http\Requests\Admin\CreateUserByAdmin;
use App\Http\Requests\Oasis\CreateOrderRequest;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\Routing\ResponseFactory;
use App\Services\Oasis\CzechRegisterSearchService;
use App\Notifications\Oasis\PaymentRequiredNotification;
class AdminController extends Controller
{
/**
* Get company details from czech company register
*
* @return array|Application|ResponseFactory|Response
*/
public function get_company_details()
{
$api = resolve(CzechRegisterSearchService::class);
$result = $api->findByIco(
request()->get('ico')
);
if (empty($result)) {
return response('Not Found', 404);
}
return response($result[0], 200);
}
/**
* Register new client and send email with payment details
*
* @param CreateOrderRequest $request
* @return Application|ResponseFactory|Response
*/
public function create_order(CreateOrderRequest $request)
{
// Create user
$newbie = User::create([
'email' => $request->email,
'password' => Hash::make(Str::random()),
]);
UserSettings::unguard();
// Store user settings
$newbie
->settings()
->create([
'storage_capacity' => 0,
'ico' => $request->ico ?? null,
'name' => $request->name,
'address' => $request->address,
'state' => $request->state,
'city' => $request->city,
'postal_code' => $request->postal_code,
'country' => $request->country,
'phone_number' => $request->phone_number ?? null,
'timezone' => '1.0',
]);
// Store subscription request
$newbie
->subscriptionRequest()
->create([
'requested_plan' => $request->plan,
]);
$plan = resolve(StripeService::class)
->getPlan($request->plan);
// Send notification with payment details
$newbie->notify(new PaymentRequiredNotification(
$newbie->subscriptionRequest,
$plan
));
return response(
new UserResource($newbie),
201
);
}
/**
* Create new user by admin
*
* @param CreateUserByAdmin $request
* @return UserResource|Application|ResponseFactory|Response
*/
public function create_user(CreateUserByAdmin $request)
{
// Create user
$user = User::forceCreate([
'role' => $request->role,
'email' => $request->email,
'password' => \Illuminate\Support\Facades\Hash::make($request->password),
]);
UserSettings::unguard();
$user
->settings()
->create([
'name' => $request->name,
'avatar' => store_avatar($request, 'avatar'),
'storage_capacity' => $request->storage_capacity,
'payment_activation' => 1,
]);
return response(new UserResource($user), 201);
}
}

View File

@@ -0,0 +1,135 @@
<?php
namespace App\Http\Controllers\Oasis;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use App\Services\StripeService;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use App\Models\Oasis\SubscriptionRequest;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\Routing\ResponseFactory;
use App\Http\Requests\User\UpdateUserPasswordRequest;
use App\Http\Resources\Oasis\SubscriptionRequestResource;
class SubscriptionController extends Controller
{
public function __construct()
{
$this->stripe = resolve(StripeService::class);
}
/**
* Get subscription request details
*
* @param SubscriptionRequest $order
* @return Application|ResponseFactory|Response
*/
public function get_subscription_request(SubscriptionRequest $order)
{
return response(
new SubscriptionRequestResource($order),
200
);
}
/**
* Get setup intent to register credit card
*
* @param SubscriptionRequest $order
* @return Application|ResponseFactory|Response
*/
public function get_setup_intent(SubscriptionRequest $order)
{
// Create stripe customer if not exist
$order->user->createOrGetStripeCustomer();
// Return setup intent
return response($order->user->createSetupIntent(), 201);
}
/**
* Subscribe user
*
* @param Request $request
* @param SubscriptionRequest $order
* @return Application|ResponseFactory|Response
*/
public function subscribe(Request $request, SubscriptionRequest $order)
{
// Make subscription from subscription request
if ($order->exists) {
// Create subscription
$order->user
->newSubscription('main', $order->requested_plan)
->create(
$this->stripe->getOrSetDefaultPaymentMethod($request, $order->user)
);
// Update Subscription request
$order->update(['status' => 'payed']);
$user = $order->user;
}
// Make subscription after user sign up and pay for the plan
if (! $order->exists) {
$user = Auth::user();
// Set user billing
$user->setBilling($request->billing);
// Update stripe customer billing info
$this->stripe->updateCustomerDetails($user);
// Make subscription
$this->stripe->createOrReplaceSubscription($request, $user);
}
// Get plan
$plan = $this->stripe->getPlan(
$order->requested_plan ?? $request->input('plan.data.id')
);
// Update user storage limit
$user
->settings()
->update([
'storage_capacity' => $plan['product']['metadata']['capacity'],
'payment_activation' => 1,
]);
return response('Done!', 204);
}
/**
* Set user password
*
* @param UpdateUserPasswordRequest $request
* @param SubscriptionRequest $order
* @return Application|ResponseFactory|Response
*/
public function set_password(UpdateUserPasswordRequest $request, SubscriptionRequest $order)
{
// Check unauthorized action
if ($order->status !== 'payed') {
abort(401, "Sorry, you don't have permission.");
}
// Set user password
$order->user->password = Hash::make($request->password);
$order->user->save();
// Update status
$order->update([
'status' => 'logged',
]);
// Log in user
Auth::login($order->user);
$request->session()->regenerate();
return response('Password was set.', 204);
}
}

View File

@@ -72,7 +72,7 @@ class BrowseShareController extends Controller
// Check password
if (Hash::check($request->password, $shared->password)) {
$cookie = json_encode([
'token' => $shared->token,
'token' => $shared->token,
'authenticated' => true,
]);
@@ -188,10 +188,10 @@ class BrowseShareController extends Controller
return [
[
'id' => $shared->item_id,
'name' => __t('home'),
'id' => $shared->item_id,
'name' => __t('home'),
'location' => 'public',
'folders' => $folders,
'folders' => $folders,
],
];
}
@@ -239,10 +239,10 @@ class BrowseShareController extends Controller
}
return Storage::response($path, $file_pretty_name, [
'Content-Type' => Storage::mimeType($path),
'Content-Type' => Storage::mimeType($path),
'Content-Length' => Storage::size($path),
'Accept-Ranges' => 'bytes',
'Content-Range' => 'bytes 0-600/' . Storage::size($path),
'Accept-Ranges' => 'bytes',
'Content-Range' => 'bytes 0-600/' . Storage::size($path),
]);
}
}

View File

@@ -40,10 +40,10 @@ class FileSharedAccessController extends Controller
return $disk
->download("zip/$zip->basename", $zip->basename, [
'Content-Type' => 'application/zip',
'Content-Length' => $disk->size("zip/$zip->basename"),
'Accept-Ranges' => 'bytes',
'Content-Range' => 'bytes 0-600/' . $disk->size("zip/$zip->basename"),
'Content-Type' => 'application/zip',
'Content-Length' => $disk->size("zip/$zip->basename"),
'Accept-Ranges' => 'bytes',
'Content-Range' => 'bytes 0-600/' . $disk->size("zip/$zip->basename"),
'Content-Disposition' => 'attachment; filename=' . $zip->basename,
]);
}

View File

@@ -252,7 +252,7 @@ class ManipulateShareItemsController extends Controller
// Get file
return response([
'url' => route('zip_public', [
'id' => $zip->id,
'id' => $zip->id,
'token' => $shared->token,
]),
'name' => $zip->basename,
@@ -291,7 +291,7 @@ class ManipulateShareItemsController extends Controller
// Get file
return response([
'url' => route('zip_public', [
'id' => $zip->id,
'id' => $zip->id,
'token' => $shared->token,
]),
'name' => $zip->basename,

View File

@@ -70,8 +70,8 @@ class AccountController extends Controller
// TODO: pridat validator do requestu
$validator = Validator::make($request->all(), [
'avatar' => 'sometimes|file',
'name' => 'string',
'value' => 'string',
'name' => 'string',
'value' => 'string',
]);
// Return error

View File

@@ -70,7 +70,7 @@ class PaymentMethodsController extends Controller
if (! $user->card_brand || ! $user->stripe_id || is_null($paymentMethodsMapped) && is_null($paymentMethodsMapped)) {
return [
'default' => null,
'others' => [],
'others' => [],
];
}

View File

@@ -55,14 +55,14 @@ class Kernel extends HttpKernel
* @var array
*/
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
];
}

View File

@@ -23,7 +23,7 @@ class ChangeRoleRequest extends FormRequest
public function rules()
{
return [
'attributes' => 'required|array',
'attributes' => 'required|array',
'attributes.role' => 'required|string',
];
}

View File

@@ -23,7 +23,7 @@ class ChangeStorageCapacityRequest extends FormRequest
public function rules()
{
return [
'attributes' => 'required|array',
'attributes' => 'required|array',
'attributes.storage_capacity' => 'required|digits_between:1,9',
];
}

View File

@@ -23,12 +23,12 @@ class CreateUserByAdmin extends FormRequest
public function rules()
{
return [
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6|confirmed',
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6|confirmed',
'name' => 'required|string|max:255',
'storage_capacity' => 'required|digits_between:1,9',
'role' => 'required|string',
'avatar' => 'sometimes|file',
'role' => 'required|string',
'avatar' => 'sometimes|file',
];
}
}

View File

@@ -24,7 +24,7 @@ class CreateFolderRequest extends FormRequest
{
return [
'parent_id' => 'nullable|uuid',
'name' => 'required|string',
'name' => 'required|string',
];
}
}

View File

@@ -24,8 +24,8 @@ class DeleteItemRequest extends FormRequest
{
return [
'data[*].force_delete' => 'required|boolean',
'data[*].type' => 'required|string',
'data[*].id' => 'required|integer',
'data[*].type' => 'required|string',
'data[*].id' => 'required|integer',
];
}
}

View File

@@ -23,9 +23,9 @@ class MoveItemRequest extends FormRequest
public function rules()
{
return [
'to_id' => 'nullable|uuid',
'to_id' => 'nullable|uuid',
'items[*].type' => 'required|string',
'items[*].id' => 'required|uuid',
'items[*].id' => 'required|uuid',
];
}
}

View File

@@ -24,9 +24,9 @@ class UploadRequest extends FormRequest
public function rules()
{
return [
'filename' => 'required|string',
'filename' => 'required|string',
'folder_id' => 'nullable|uuid',
'file' => ['required', 'file', new DisabledMimetypes],
'file' => ['required', 'file', new DisabledMimetypes],
];
}
}

View File

@@ -23,7 +23,7 @@ class CreateLanguageRequest extends FormRequest
public function rules()
{
return [
'name' => 'required|string',
'name' => 'required|string',
'locale' => 'required|string',
];
}

View File

@@ -23,7 +23,7 @@ class UpdateLanguageRequest extends FormRequest
public function rules()
{
return [
'name' => 'required|string',
'name' => 'required|string',
'value' => 'required|string',
];
}

View File

@@ -23,7 +23,7 @@ class UpdateStringRequest extends FormRequest
public function rules()
{
return [
'name' => 'required|string',
'name' => 'required|string',
'value' => 'required|string',
];
}

View File

@@ -0,0 +1,38 @@
<?php
namespace App\Http\Requests\Oasis;
use Illuminate\Foundation\Http\FormRequest;
class CreateOrderRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'ico' => 'sometimes|nullable',
'name' => 'required|string',
'email' => 'required|email|unique:users',
'phone_number' => 'string|nullable',
'address' => 'required|string',
'state' => 'required|string',
'city' => 'required|string',
'postal_code' => 'required|string',
'country' => 'required|string',
'plan' => 'required|string',
];
}
}

View File

@@ -23,7 +23,7 @@ class RegisterNewPaymentMethodRequest extends FormRequest
public function rules()
{
return [
'token' => 'required|string',
'token' => 'required|string',
'default' => 'required|boolean',
];
}

View File

@@ -23,7 +23,7 @@ class SendContactMessageRequest extends FormRequest
public function rules()
{
return [
'email' => 'required|email',
'email' => 'required|email',
'message' => 'required|string',
];
}

View File

@@ -23,15 +23,15 @@ class StoreAppSetupRequest extends FormRequest
public function rules()
{
return [
'title' => 'required|string',
'description' => 'required|string',
'logo' => 'sometimes|file',
'logo_horizontal' => 'sometimes|file',
'favicon' => 'sometimes|file',
'contactMail' => 'required|email',
'googleAnalytics' => 'sometimes|string',
'defaultStorage' => 'sometimes|digits_between:1,9',
'userRegistration' => 'required|boolean',
'title' => 'required|string',
'description' => 'required|string',
'logo' => 'sometimes|file',
'logo_horizontal' => 'sometimes|file',
'favicon' => 'sometimes|file',
'contactMail' => 'required|email',
'googleAnalytics' => 'sometimes|string',
'defaultStorage' => 'sometimes|digits_between:1,9',
'userRegistration' => 'required|boolean',
'storageLimitation' => 'required|boolean',
];
}

View File

@@ -24,11 +24,11 @@ class StoreDatabaseCredentialsRequest extends FormRequest
{
return [
'connection' => 'required|string',
'host' => 'required|string',
'port' => 'required|string',
'name' => 'required|string',
'username' => 'required|string',
'password' => 'required|string',
'host' => 'required|string',
'port' => 'required|string',
'name' => 'required|string',
'username' => 'required|string',
'password' => 'required|string',
];
}
}

View File

@@ -23,20 +23,20 @@ class StoreEnvironmentSetupRequest extends FormRequest
public function rules()
{
return [
'storage' => 'required|array',
'storage.driver' => 'required|string',
'storage.key' => 'sometimes|nullable|string',
'storage.secret' => 'sometimes|nullable|string',
'storage' => 'required|array',
'storage.driver' => 'required|string',
'storage.key' => 'sometimes|nullable|string',
'storage.secret' => 'sometimes|nullable|string',
'storage.endpoint' => 'sometimes|nullable|string',
'storage.region' => 'sometimes|nullable|string',
'storage.bucket' => 'sometimes|nullable|string',
'mail' => 'required|array',
'mail.driver' => 'required|string',
'mail.host' => 'required|string',
'mail.port' => 'required|string',
'mail.username' => 'required|string',
'mail.password' => 'required|string',
'mail.encryption' => 'required|string',
'storage.region' => 'sometimes|nullable|string',
'storage.bucket' => 'sometimes|nullable|string',
'mail' => 'required|array',
'mail.driver' => 'required|string',
'mail.host' => 'required|string',
'mail.port' => 'required|string',
'mail.username' => 'required|string',
'mail.password' => 'required|string',
'mail.encryption' => 'required|string',
];
}
}

View File

@@ -24,13 +24,13 @@ class StoreStripeBillingRequest extends FormRequest
{
return [
'billing_phone_number' => 'sometimes|nullable|string',
'billing_postal_code' => 'required|string',
'billing_vat_number' => 'required|string',
'billing_address' => 'required|string',
'billing_country' => 'required|string',
'billing_state' => 'required|string',
'billing_city' => 'required|string',
'billing_name' => 'required|string',
'billing_postal_code' => 'required|string',
'billing_vat_number' => 'required|string',
'billing_address' => 'required|string',
'billing_country' => 'required|string',
'billing_state' => 'required|string',
'billing_city' => 'required|string',
'billing_name' => 'required|string',
];
}
}

View File

@@ -23,10 +23,10 @@ class StoreStripeCredentialsRequest extends FormRequest
public function rules()
{
return [
'currency' => 'required|string',
'currency' => 'required|string',
'webhookSecret' => 'required|string',
'secret' => 'required|string',
'key' => 'required|string',
'secret' => 'required|string',
'key' => 'required|string',
];
}
}

View File

@@ -23,12 +23,12 @@ class StoreStripePlansRequest extends FormRequest
public function rules()
{
return [
'plans' => 'required|array',
'plans.*.type' => 'required|string',
'plans.*.attributes.name' => 'required|string',
'plans.*.attributes.price' => 'required|string',
'plans' => 'required|array',
'plans.*.type' => 'required|string',
'plans.*.attributes.name' => 'required|string',
'plans.*.attributes.price' => 'required|string',
'plans.*.attributes.description' => 'sometimes|nullable|string',
'plans.*.attributes.capacity' => 'required|digits_between:1,9',
'plans.*.attributes.capacity' => 'required|digits_between:1,9',
];
}
}

View File

@@ -25,11 +25,11 @@ class CreateShareRequest extends FormRequest
{
return [
'isPassword' => 'required|boolean',
'type' => 'required|string',
'type' => 'required|string',
'expiration' => 'integer|nullable',
'permission' => 'string',
'password' => 'string',
'emails.*' => 'email',
'password' => 'string',
'emails.*' => 'email',
];
}
}

View File

@@ -24,10 +24,10 @@ class UpdateShareRequest extends FormRequest
public function rules()
{
return [
'protected' => 'required|boolean',
'protected' => 'required|boolean',
'permission' => 'nullable|string',
'expiration' => 'integer|nullable',
'password' => 'string',
'password' => 'string',
];
}
}

View File

@@ -24,32 +24,32 @@ class StoreUpgradeAccountRequest extends FormRequest
{
return [
// Billings
'billing' => 'required|array',
'billing.billing_address' => 'required|string',
'billing.billing_city' => 'required|string',
'billing.billing_country' => 'required|string',
'billing.billing_name' => 'required|string',
'billing' => 'required|array',
'billing.billing_address' => 'required|string',
'billing.billing_city' => 'required|string',
'billing.billing_country' => 'required|string',
'billing.billing_name' => 'required|string',
'billing.billing_phone_number' => 'required|string',
'billing.billing_postal_code' => 'required|string',
'billing.billing_state' => 'required|string',
'billing.billing_postal_code' => 'required|string',
'billing.billing_state' => 'required|string',
// Payment
'payment' => 'required|array',
'payment.type' => 'required|string',
'payment.meta' => 'required|sometimes|array',
'payment' => 'required|array',
'payment.type' => 'required|string',
'payment.meta' => 'required|sometimes|array',
'payment.meta.pm' => 'required|sometimes|string',
// Plan
'plan.data' => 'required|array',
'plan.data.attributes' => 'required|array',
'plan.data.attributes.capacity' => 'required|digits_between:1,9',
'plan.data' => 'required|array',
'plan.data.attributes' => 'required|array',
'plan.data.attributes.capacity' => 'required|digits_between:1,9',
'plan.data.attributes.capacity_formatted' => 'required|string',
'plan.data.attributes.currency' => 'required|string',
'plan.data.attributes.description' => 'sometimes|string|nullable',
'plan.data.attributes.name' => 'required|string',
'plan.data.attributes.price' => 'required|string',
'plan.data.id' => 'required|string',
'plan.data.type' => 'required|string',
'plan.data.attributes.currency' => 'required|string',
'plan.data.attributes.description' => 'sometimes|string|nullable',
'plan.data.attributes.name' => 'required|string',
'plan.data.attributes.price' => 'required|string',
'plan.data.id' => 'required|string',
'plan.data.type' => 'required|string',
];
}
}

View File

@@ -15,16 +15,16 @@ class FileResource extends JsonResource
{
return [
'data' => [
'id' => $this->id,
'type' => 'file',
'id' => $this->id,
'type' => 'file',
'attributes' => [
'name' => $this->name,
'basename' => $this->basename,
'mimetype' => $this->mimetype,
'filesize' => $this->filesize,
'type' => $this->type,
'file_url' => $this->file_url,
'thumbnail' => $this->thumbnail,
'name' => $this->name,
'basename' => $this->basename,
'mimetype' => $this->mimetype,
'filesize' => $this->filesize,
'type' => $this->type,
'file_url' => $this->file_url,
'thumbnail' => $this->thumbnail,
'created_at' => $this->created_at,
'updated_at' => $this->created_at,
],

View File

@@ -20,25 +20,25 @@ class InvoiceAdminResource extends JsonResource
return [
'data' => [
'id' => $this['id'],
'type' => 'invoices',
'id' => $this['id'],
'type' => 'invoices',
'attributes' => [
'customer' => $this['customer'],
'total' => Cashier::formatAmount($this['total']),
'currency' => $this['currency'],
'customer' => $this['customer'],
'total' => Cashier::formatAmount($this['total']),
'currency' => $this['currency'],
'created_at_formatted' => format_date($this['created']),
'created_at' => $this['created'],
'order' => $this['number'],
'user_id' => $user->id ?? null,
'client' => [
'billing_address' => $this['customer_address'],
'billing_name' => $this['customer_name'],
'created_at' => $this['created'],
'order' => $this['number'],
'user_id' => $user->id ?? null,
'client' => [
'billing_address' => $this['customer_address'],
'billing_name' => $this['customer_name'],
'billing_phone_number' => $this['customer_phone'],
],
'bag' => [
'amount' => $this['lines']['data'][0]['amount'],
'currency' => $this['lines']['data'][0]['currency'],
'type' => $this['lines']['data'][0]['type'],
'amount' => $this['lines']['data'][0]['amount'],
'currency' => $this['lines']['data'][0]['currency'],
'type' => $this['lines']['data'][0]['type'],
'description' => $this['lines']['data'][0]['description'],
],
'seller' => null,
@@ -48,10 +48,10 @@ class InvoiceAdminResource extends JsonResource
'relationships' => [
'user' => [
'data' => [
'id' => $user->id,
'type' => 'user',
'id' => $user->id,
'type' => 'user',
'attributes' => [
'name' => $user->settings->name,
'name' => $user->settings->name,
'avatar' => $user->settings->avatar,
],
],

View File

@@ -19,33 +19,33 @@ class InvoiceResource extends JsonResource
return [
'data' => [
'id' => $this->id,
'type' => 'invoices',
'id' => $this->id,
'type' => 'invoices',
'attributes' => [
'customer' => $this->customer,
'total' => $this->total(),
'currency' => $this->currency,
'customer' => $this->customer,
'total' => $this->total(),
'currency' => $this->currency,
'created_at_formatted' => format_date($this->date(), '%d. %B. %Y'),
'created_at' => $this->created,
'order' => $this->number,
'user_id' => $user->id ?? null,
'client' => [
'billing_address' => $this->customer_address,
'billing_name' => $this->customer_name,
'created_at' => $this->created,
'order' => $this->number,
'user_id' => $user->id ?? null,
'client' => [
'billing_address' => $this->customer_address,
'billing_name' => $this->customer_name,
'billing_phone_number' => $this->customer_phone,
],
'seller' => null,
'invoice_items' => $this->get_invoice_items(),
'seller' => null,
'invoice_items' => $this->get_invoice_items(),
'invoice_subscriptions' => $this->get_invoice_subscriptions(),
],
$this->mergeWhen($user, [
'relationships' => [
'user' => [
'data' => [
'id' => $user->id,
'type' => 'user',
'id' => $user->id,
'type' => 'user',
'attributes' => [
'name' => $user->settings->name,
'name' => $user->settings->name,
'avatar' => $user->settings->avatar,
],
],
@@ -65,10 +65,10 @@ class InvoiceResource extends JsonResource
foreach ($this->subscriptions() as $item) {
array_push($array, [
'amount' => $item->total(),
'amount' => $item->total(),
'description' => $item->description,
'currency' => $item->currency,
'type' => $item->type,
'currency' => $item->currency,
'type' => $item->type,
]);
}
@@ -84,10 +84,10 @@ class InvoiceResource extends JsonResource
foreach ($this->invoiceItems() as $item) {
array_push($array, [
'amount' => $item->total(),
'amount' => $item->total(),
'description' => $item->description,
'currency' => $item->currency,
'type' => $item->type,
'currency' => $item->currency,
'type' => $item->type,
]);
}

View File

@@ -23,7 +23,7 @@ class LanguageCollection extends ResourceCollection
return [
'data' => $this->collection,
'meta' => [
'current_language' => new LanguageResource($current_language),
'current_language' => new LanguageResource($current_language),
'reference_translations' => get_default_language_translations(),
],
];

View File

@@ -15,14 +15,14 @@ class LanguageResource extends JsonResource
{
return [
'data' => [
'id' => $this->id,
'type' => 'languages',
'id' => $this->id,
'type' => 'languages',
'attributes' => [
'name' => $this->name,
'locale' => $this->locale,
'name' => $this->name,
'locale' => $this->locale,
'translations' => map_language_translations($this->languageTranslations),
'updated_at' => $this->updated_at,
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
'created_at' => $this->created_at,
],
],
];

View File

@@ -0,0 +1,51 @@
<?php
namespace App\Http\Resources\Oasis;
use App\Services\StripeService;
use App\Http\Resources\PricingResource;
use Illuminate\Http\Resources\Json\JsonResource;
class SubscriptionRequestResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'data' => [
'id' => $this->id,
'type' => 'subscription-requests',
'attributes' => [
'requested_plan' => $this->requested_plan,
'status' => $this->status,
'created_at_formatted' => format_date($this->created_at, '%d. %B. %Y'),
],
'relationships' => [
'user' => [
'data' => [
'id' => $this->user->id,
'type' => 'users',
'attributes' => [
'name' => $this->user->settings->name,
'address' => $this->user->settings->address,
'state' => $this->user->settings->state,
'city' => $this->user->settings->city,
'postal_code' => $this->user->settings->postal_code,
'country' => $this->user->settings->country,
'phone_number' => $this->user->settings->phone_number,
'ico' => $this->user->settings->ico,
],
],
],
'plan' => new PricingResource(
resolve(StripeService::class)->getPlan($this->requested_plan)
),
],
],
];
}
}

View File

@@ -15,13 +15,13 @@ class PageResource extends JsonResource
{
return [
'data' => [
'id' => $this->slug,
'type' => 'pages',
'id' => $this->slug,
'type' => 'pages',
'attributes' => [
'visibility' => $this->visibility,
'title' => $this->title,
'slug' => $this->slug,
'content' => $this->content,
'visibility' => $this->visibility,
'title' => $this->title,
'slug' => $this->slug,
'content' => $this->content,
'content_formatted' => add_paragraphs($this->content),
],
],

View File

@@ -15,18 +15,18 @@ class PaymentCardResource extends JsonResource
{
return [
'data' => [
'id' => (string) $this['id'],
'type' => 'payment_method',
'id' => (string) $this['id'],
'type' => 'payment_method',
'attributes' => [
'provider' => 'stripe',
'card_id' => $this['id'],
'brand' => strtolower($this['card']['brand']),
'last4' => $this['card']['last4'],
'exp_month' => $this['card']['exp_month'],
'exp_year' => $this['card']['exp_year'],
'provider' => 'stripe',
'card_id' => $this['id'],
'brand' => strtolower($this['card']['brand']),
'last4' => $this['card']['last4'],
'exp_month' => $this['card']['exp_month'],
'exp_year' => $this['card']['exp_year'],
'created_at' => format_date($this['created_at'], '%d. %B. %Y'),
'status' => 'active',
'default' => 0,
'status' => 'active',
'default' => 0,
],
],
];

View File

@@ -15,18 +15,18 @@ class PaymentDefaultCardResource extends JsonResource
{
return [
'data' => [
'id' => (string) $this['id'],
'type' => 'payment_method',
'id' => (string) $this['id'],
'type' => 'payment_method',
'attributes' => [
'provider' => 'stripe',
'card_id' => $this['id'],
'brand' => isset($this['brand']) ? strtolower($this['brand']) : strtolower($this['card']['brand']),
'last4' => isset($this['last4']) ? $this['last4'] : $this['card']['last4'],
'exp_month' => isset($this['exp_month']) ? $this['exp_month'] : $this['card']['exp_month'],
'exp_year' => isset($this['exp_year']) ? $this['exp_year'] : $this['card']['exp_year'],
'provider' => 'stripe',
'card_id' => $this['id'],
'brand' => isset($this['brand']) ? strtolower($this['brand']) : strtolower($this['card']['brand']),
'last4' => isset($this['last4']) ? $this['last4'] : $this['card']['last4'],
'exp_month' => isset($this['exp_month']) ? $this['exp_month'] : $this['card']['exp_month'],
'exp_year' => isset($this['exp_year']) ? $this['exp_year'] : $this['card']['exp_year'],
'created_at' => format_date($this['created_at'], '%d. %B. %Y'),
'status' => 'active',
'default' => 0,
'status' => 'active',
'default' => 0,
],
],
];

View File

@@ -16,23 +16,25 @@ class PlanResource extends JsonResource
public function toArray($request)
{
// Get subscribers
$subscriber_count = Subscription::where('stripe_plan', $this['plan']['id'])->where('stripe_status', 'active')->get();
$subscriber_count = Subscription::where('stripe_plan', $this['plan']['id'])
->where('stripe_status', 'active')
->get();
return [
'data' => [
'id' => $this['plan']['id'],
'type' => 'plans',
'id' => $this['plan']['id'],
'type' => 'plans',
'attributes' => [
'subscribers' => $subscriber_count->count(),
'status' => $this['plan']['active'] ? 1 : 0,
'name' => $this['product']['name'],
'description' => $this['product']['description'],
'price' => $this['plan']['amount'],
'price_formatted' => Cashier::formatAmount($this['plan']['amount']),
'capacity_formatted' => format_gigabytes($this['product']['metadata']['capacity']),
'capacity' => (int) $this['product']['metadata']['capacity'],
'subscribers' => $subscriber_count->count(),
'status' => $this['plan']['active'] ? 1 : 0,
'name' => $this['product']['name'],
'description' => $this['product']['description'],
'price' => $this['plan']['amount'],
'price_formatted' => Cashier::formatAmount($this['plan']['amount']),
'capacity_formatted' => format_gigabytes($this['product']['metadata']['capacity']),
'capacity' => (int) $this['product']['metadata']['capacity'],
'created_at_formatted' => format_date($this['plan']['created']),
'created_at' => $this['plan']['created'],
'created_at' => $this['plan']['created'],
],
],
];

View File

@@ -17,16 +17,16 @@ class PricingResource extends JsonResource
{
return [
'data' => [
'id' => $this['plan']['id'],
'type' => 'plans',
'id' => $this['plan']['id'],
'type' => 'plans',
'attributes' => [
'name' => $this['product']['name'],
'description' => $this['product']['description'],
'price' => Cashier::formatAmount($this['plan']['amount']),
'name' => $this['product']['name'],
'description' => $this['product']['description'],
'price' => Cashier::formatAmount($this['plan']['amount']),
'capacity_formatted' => format_gigabytes($this['product']['metadata']['capacity']),
'capacity' => (int) $this['product']['metadata']['capacity'],
'currency' => config('cashier.currency'),
'tax_rates' => resolve(StripeService::class)->get_tax_rates($this['plan']['amount']),
'capacity' => (int) $this['product']['metadata']['capacity'],
'currency' => config('cashier.currency'),
'tax_rates' => resolve(StripeService::class)->get_tax_rates($this['plan']['amount']),
],
],
];

View File

@@ -15,18 +15,18 @@ class ShareResource extends JsonResource
{
return [
'data' => [
'id' => (string) $this->id,
'type' => 'shares',
'id' => (string) $this->id,
'type' => 'shares',
'attributes' => [
'permission' => $this->permission,
'permission' => $this->permission,
'is_protected' => $this->is_protected,
'item_id' => $this->item_id,
'expire_in' => (int) $this->expire_in,
'token' => $this->token,
'link' => $this->link,
'type' => $this->type,
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
'item_id' => $this->item_id,
'expire_in' => (int) $this->expire_in,
'token' => $this->token,
'link' => $this->link,
'type' => $this->type,
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
],
],
];

View File

@@ -16,43 +16,49 @@ class UserResource extends JsonResource
// TODO: zrefaktorovat
return [
'data' => [
'id' => $this->id,
'type' => 'user',
'id' => $this->id,
'type' => 'user',
'attributes' => [
'storage_capacity' => $this->settings->storage_capacity,
'subscription' => $this->subscribed('main'),
'incomplete_payment' => $this->hasIncompletePayment('main') ? route('cashier.payment', $this->subscription('main')->latestPayment()->id) : null,
'stripe_customer' => is_null($this->stripe_id) ? false : true,
'email' => is_demo() ? obfuscate_email($this->email) : $this->email,
'role' => $this->role,
'folders' => $this->folder_tree,
'storage' => $this->storage,
'storage_capacity' => $this->settings->storage_capacity,
'subscription' => $this->subscribed('main'),
'incomplete_payment' => $this->hasIncompletePayment('main') ? route('cashier.payment', $this->subscription('main')->latestPayment()->id) : null,
'stripe_customer' => is_null($this->stripe_id) ? false : true,
'email' => is_demo() ? obfuscate_email($this->email) : $this->email,
'role' => $this->role,
'folders' => $this->folder_tree,
'storage' => $this->storage,
'created_at_formatted' => format_date($this->created_at, '%d. %B. %Y'),
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
// OasisDrive
'has_billing_profile' => $this->invoiceProfile ? true : false,
],
'relationships' => [
'settings' => [
'data' => [
'id' => $this->id,
'type' => 'settings',
'id' => $this->id,
'type' => 'settings',
'attributes' => [
'avatar' => $this->settings->avatar,
'name' => $this->settings->name,
'address' => $this->settings->address,
'state' => $this->settings->state,
'city' => $this->settings->city,
'postal_code' => $this->settings->postal_code,
'country' => $this->settings->country,
'avatar' => $this->settings->avatar,
'name' => $this->settings->name,
'address' => $this->settings->address,
'state' => $this->settings->state,
'city' => $this->settings->city,
'postal_code' => $this->settings->postal_code,
'country' => $this->settings->country,
'phone_number' => $this->settings->phone_number,
'timezone' => $this->settings->timezone,
'timezone' => $this->settings->timezone,
// OasisDrive
'payment_activation' => (integer) $this->settings->payment_activation,
],
],
],
'favourites' => [
'data' => [
'id' => $this->id,
'type' => 'favourite_folders',
'id' => $this->id,
'type' => 'favourite_folders',
'attributes' => [
'folders' => $this->favouriteFolders->makeHidden(['pivot']),
],

View File

@@ -53,32 +53,32 @@ class UserStorageResource extends JsonResource
return [
'data' => [
'id' => (string) $this->id,
'type' => 'storage',
'id' => (string) $this->id,
'type' => 'storage',
'attributes' => [
'used' => Metric::bytes($this->used_capacity)->format(),
'capacity' => format_gigabytes($this->settings->storage_capacity),
'used' => Metric::bytes($this->used_capacity)->format(),
'capacity' => format_gigabytes($this->settings->storage_capacity),
'percentage' => (float) get_storage_fill_percentage($this->used_capacity, $this->settings->storage_capacity),
],
'meta' => [
'images' => [
'used' => Metric::bytes($images)->format(),
'used' => Metric::bytes($images)->format(),
'percentage' => (float) get_storage_fill_percentage($images, $this->settings->storage_capacity),
],
'audios' => [
'used' => Metric::bytes($audios)->format(),
'used' => Metric::bytes($audios)->format(),
'percentage' => (float) get_storage_fill_percentage($audios, $this->settings->storage_capacity),
],
'videos' => [
'used' => Metric::bytes($videos)->format(),
'used' => Metric::bytes($videos)->format(),
'percentage' => (float) get_storage_fill_percentage($videos, $this->settings->storage_capacity),
],
'documents' => [
'used' => Metric::bytes($documents)->format(),
'used' => Metric::bytes($documents)->format(),
'percentage' => (float) get_storage_fill_percentage($documents, $this->settings->storage_capacity),
],
'others' => [
'used' => Metric::bytes($others)->format(),
'used' => Metric::bytes($others)->format(),
'percentage' => (float) get_storage_fill_percentage($others, $this->settings->storage_capacity),
],
],

View File

@@ -22,19 +22,19 @@ class UserSubscription extends JsonResource
return [
'data' => [
'id' => $subscription['plan']['id'],
'type' => 'subscription',
'id' => $subscription['plan']['id'],
'type' => 'subscription',
'attributes' => [
'incomplete' => $this->subscription('main')->incomplete(),
'active' => $this->subscription('main')->active(),
'canceled' => $this->subscription('main')->cancelled(),
'name' => $subscription['product']['name'],
'capacity' => (int) $subscription['product']['metadata']['capacity'],
'incomplete' => $this->subscription('main')->incomplete(),
'active' => $this->subscription('main')->active(),
'canceled' => $this->subscription('main')->cancelled(),
'name' => $subscription['product']['name'],
'capacity' => (int) $subscription['product']['metadata']['capacity'],
'capacity_formatted' => format_gigabytes($subscription['product']['metadata']['capacity']),
'slug' => $subscription['plan']['id'],
'canceled_at' => format_date($active_subscription['canceled_at'], '%d. %B. %Y'),
'created_at' => format_date($active_subscription['current_period_start'], '%d. %B. %Y'),
'ends_at' => format_date($active_subscription['current_period_end'], '%d. %B. %Y'),
'slug' => $subscription['plan']['id'],
'canceled_at' => format_date($active_subscription['canceled_at'], '%d. %B. %Y'),
'created_at' => format_date($active_subscription['current_period_start'], '%d. %B. %Y'),
'ends_at' => format_date($active_subscription['current_period_end'], '%d. %B. %Y'),
],
],
];

View File

@@ -16,7 +16,7 @@ use Illuminate\Support\Facades\Storage;
use Intervention\Image\ImageManagerStatic as Image;
use Illuminate\Database\Eloquent\ModelNotFoundException;
if (!function_exists('obfuscate_email')) {
if (! function_exists('obfuscate_email')) {
/**
* Obfuscate email
*
@@ -33,7 +33,7 @@ if (!function_exists('obfuscate_email')) {
}
}
if (!function_exists('get_setting')) {
if (! function_exists('get_setting')) {
/**
* Get single value from settings table
*
@@ -46,7 +46,7 @@ if (!function_exists('get_setting')) {
}
}
if (!function_exists('get_settings_in_json')) {
if (! function_exists('get_settings_in_json')) {
/**
* Get all app settings and return them as json
*/
@@ -60,7 +60,7 @@ if (!function_exists('get_settings_in_json')) {
}
}
if (!function_exists('get_setup_status')) {
if (! function_exists('get_setup_status')) {
/**
* Check if setup wizard was passed
*
@@ -74,7 +74,7 @@ if (!function_exists('get_setup_status')) {
}
}
if (!function_exists('add_paragraphs')) {
if (! function_exists('add_paragraphs')) {
/**
* Create paragraph from text
*
@@ -123,7 +123,7 @@ if (!function_exists('add_paragraphs')) {
}
}
if (!function_exists('setEnvironmentValue')) {
if (! function_exists('setEnvironmentValue')) {
/**
* Set environment value
*
@@ -150,11 +150,11 @@ if (!function_exists('setEnvironmentValue')) {
$str = substr($str, 0, -1);
return !(!file_put_contents($envFile, $str));
return ! (! file_put_contents($envFile, $str));
}
}
if (!function_exists('get_invoice_number')) {
if (! function_exists('get_invoice_number')) {
/**
* Get invoice number
*
@@ -168,11 +168,11 @@ if (!function_exists('get_invoice_number')) {
return now()->year . '001';
}
return (int)$invoices->last()->order + 1;
return (int) $invoices->last()->order + 1;
}
}
if (!function_exists('cache_forget_many')) {
if (! function_exists('cache_forget_many')) {
/**
* Forget many cache keys at once
* @param $cache
@@ -185,7 +185,7 @@ if (!function_exists('cache_forget_many')) {
}
}
if (!function_exists('get_storage')) {
if (! function_exists('get_storage')) {
/**
* Get app version from config
*
@@ -197,7 +197,7 @@ if (!function_exists('get_storage')) {
}
}
if (!function_exists('is_storage_driver')) {
if (! function_exists('is_storage_driver')) {
/**
* Check if is running AWS s3 as storage
*
@@ -213,7 +213,7 @@ if (!function_exists('is_storage_driver')) {
}
}
if (!function_exists('get_version')) {
if (! function_exists('get_version')) {
/**
* Get app version from config
*
@@ -225,7 +225,7 @@ if (!function_exists('get_version')) {
}
}
if (!function_exists('is_demo')) {
if (! function_exists('is_demo')) {
/**
* Check if is demo
*
@@ -237,7 +237,7 @@ if (!function_exists('is_demo')) {
}
}
if (!function_exists('is_demo_account')) {
if (! function_exists('is_demo_account')) {
/**
* Check if is demo
*
@@ -250,7 +250,7 @@ if (!function_exists('is_demo_account')) {
}
}
if (!function_exists('get_item')) {
if (! function_exists('get_item')) {
/**
* Get folder or file item
*
@@ -266,7 +266,7 @@ if (!function_exists('get_item')) {
}
}
if (!function_exists('get_shared')) {
if (! function_exists('get_shared')) {
/**
* Get shared token
*
@@ -280,7 +280,7 @@ if (!function_exists('get_shared')) {
}
}
if (!function_exists('is_editor')) {
if (! function_exists('is_editor')) {
/**
* Check if shared permission is editor
*
@@ -293,7 +293,7 @@ if (!function_exists('is_editor')) {
}
}
if (!function_exists('is_visitor')) {
if (! function_exists('is_visitor')) {
/**
* Check if shared permission is visitor
*
@@ -306,7 +306,7 @@ if (!function_exists('is_visitor')) {
}
}
if (!function_exists('store_avatar')) {
if (! function_exists('store_avatar')) {
/**
* Store user avatar to storage
*
@@ -316,7 +316,7 @@ if (!function_exists('store_avatar')) {
*/
function store_avatar($request, $name)
{
if (!$request->hasFile($name)) {
if (! $request->hasFile($name)) {
return null;
}
@@ -345,7 +345,7 @@ if (!function_exists('store_avatar')) {
}
}
if (!function_exists('store_system_image')) {
if (! function_exists('store_system_image')) {
/**
* Store system image
*
@@ -355,7 +355,7 @@ if (!function_exists('store_system_image')) {
*/
function store_system_image($request, $name)
{
if (!$request->hasFile($name)) {
if (! $request->hasFile($name)) {
return null;
}
@@ -372,7 +372,7 @@ if (!function_exists('store_system_image')) {
}
}
if (!function_exists('make_single_input')) {
if (! function_exists('make_single_input')) {
/**
* Make input from request
*
@@ -392,7 +392,7 @@ if (!function_exists('make_single_input')) {
}
}
if (!function_exists('format_gigabytes')) {
if (! function_exists('format_gigabytes')) {
/**
* Format integer to gigabytes
*
@@ -409,7 +409,7 @@ if (!function_exists('format_gigabytes')) {
}
}
if (!function_exists('format_megabytes')) {
if (! function_exists('format_megabytes')) {
/**
* Format string to formated megabytes string
*
@@ -430,7 +430,7 @@ if (!function_exists('format_megabytes')) {
}
}
if (!function_exists('format_bytes')) {
if (! function_exists('format_bytes')) {
/**
* Convert megabytes to bytes
*
@@ -443,7 +443,7 @@ if (!function_exists('format_bytes')) {
}
}
if (!function_exists('get_storage_fill_percentage')) {
if (! function_exists('get_storage_fill_percentage')) {
/**
* Get storage usage in percent
*
@@ -464,11 +464,11 @@ if (!function_exists('get_storage_fill_percentage')) {
}
// Return in 2 decimal
return number_format((float)$progress, 2, '.', '');
return number_format((float) $progress, 2, '.', '');
}
}
if (!function_exists('user_storage_percentage')) {
if (! function_exists('user_storage_percentage')) {
/**
* Get user capacity fill by percentage
*
@@ -490,7 +490,7 @@ if (!function_exists('user_storage_percentage')) {
}
}
if (!function_exists('recursiveFind')) {
if (! function_exists('recursiveFind')) {
/**
* Find all key values in recursive array
*
@@ -514,7 +514,7 @@ if (!function_exists('recursiveFind')) {
}
}
if (!function_exists('appeared_once')) {
if (! function_exists('appeared_once')) {
/**
* Get values which appears only once in array
* @param $arr
@@ -536,7 +536,7 @@ if (!function_exists('appeared_once')) {
}
}
if (!function_exists('filter_folders_ids')) {
if (! function_exists('filter_folders_ids')) {
/**
* @param $folders
* @param string $by_column
@@ -550,7 +550,7 @@ if (!function_exists('filter_folders_ids')) {
}
}
if (!function_exists('format_date')) {
if (! function_exists('format_date')) {
/**
* Format localized date
*
@@ -566,7 +566,7 @@ if (!function_exists('format_date')) {
}
}
if (!function_exists('get_file_type')) {
if (! function_exists('get_file_type')) {
/**
* Get file type from mimetype
*
@@ -586,7 +586,7 @@ if (!function_exists('get_file_type')) {
}
}
if (!function_exists('map_language_translations')) {
if (! function_exists('map_language_translations')) {
/**
* It map language translations as language key and language value
*
@@ -601,7 +601,7 @@ if (!function_exists('map_language_translations')) {
}
}
if (!function_exists('get_file_type_from_mimetype')) {
if (! function_exists('get_file_type_from_mimetype')) {
/**
* Get file type from mimetype
*
@@ -614,7 +614,7 @@ if (!function_exists('get_file_type_from_mimetype')) {
}
}
if (!function_exists('get_pretty_name')) {
if (! function_exists('get_pretty_name')) {
/**
* Format pretty name file
*
@@ -639,7 +639,7 @@ if (!function_exists('get_pretty_name')) {
}
}
if (!function_exists('get_image_meta_data')) {
if (! function_exists('get_image_meta_data')) {
/**
* Get exif data from jpeg image
*
@@ -659,7 +659,7 @@ if (!function_exists('get_image_meta_data')) {
}
}
if (!function_exists('get_default_language_translations')) {
if (! function_exists('get_default_language_translations')) {
/**
* @return Collection
*/
@@ -673,7 +673,7 @@ if (!function_exists('get_default_language_translations')) {
}
}
if (!function_exists('is_dev')) {
if (! function_exists('is_dev')) {
/**
* Check if app is in dev mode
*
@@ -685,7 +685,7 @@ if (!function_exists('is_dev')) {
}
}
if (!function_exists('seems_utf8')) {
if (! function_exists('seems_utf8')) {
/**
* @param $str
* @return bool
@@ -730,7 +730,7 @@ if (!function_exists('seems_utf8')) {
}
}
if (!function_exists('remove_accents')) {
if (! function_exists('remove_accents')) {
/**
* Converts all accent characters to ASCII characters.
*
@@ -741,7 +741,7 @@ if (!function_exists('remove_accents')) {
*/
function remove_accents($string)
{
if (!preg_match('/[\x80-\xff]/', $string)) {
if (! preg_match('/[\x80-\xff]/', $string)) {
return $string;
}
@@ -844,7 +844,7 @@ if (!function_exists('remove_accents')) {
// Euro Sign
chr(226) . chr(130) . chr(172) => 'E',
// GBP (Pound) Sign
chr(194) . chr(163) => '',];
chr(194) . chr(163) => '', ];
$string = strtr($string, $chars);
} else {
@@ -872,8 +872,7 @@ if (!function_exists('remove_accents')) {
}
}
if (!function_exists('get_files_for_zip')) {
if (! function_exists('get_files_for_zip')) {
/**
* Get all files from folder and get their folder location in VueFileManager directories
*
@@ -885,7 +884,7 @@ if (!function_exists('get_files_for_zip')) {
function get_files_for_zip($folders, $files, $path = [])
{
// Return file list
if (!isset($folders->folders)) {
if (! isset($folders->folders)) {
return $files->unique()->values()->all();
}
@@ -913,7 +912,7 @@ if (!function_exists('get_files_for_zip')) {
}
}
if (!function_exists('set_time_by_user_timezone')) {
if (! function_exists('set_time_by_user_timezone')) {
/**
* Set time by user timezone GMT
*
@@ -934,7 +933,7 @@ if (!function_exists('set_time_by_user_timezone')) {
}
}
if (!function_exists('__t')) {
if (! function_exists('__t')) {
/**
* Translate the given message.
* @param $key
@@ -955,12 +954,12 @@ if (!function_exists('__t')) {
// Get language strings
$strings = cache()->rememberForever("language-translations-$locale", function () use ($locale) {
try {
return Language::whereLocale($locale)->firstOrFail()->languageTranslations;
} catch (QueryException | ModelNotFoundException $e) {
return null;
}
}) ?? get_default_language_translations();
try {
return Language::whereLocale($locale)->firstOrFail()->languageTranslations;
} catch (QueryException | ModelNotFoundException $e) {
return null;
}
}) ?? get_default_language_translations();
// Find the string by key
$string = $strings->firstWhere('key', $key)->value ?? $strings->get($key);
@@ -973,7 +972,7 @@ if (!function_exists('__t')) {
}
}
if (!function_exists('replace_occurrence')) {
if (! function_exists('replace_occurrence')) {
/**
* Replace string occurrence in __t() by their values
*

View File

@@ -136,10 +136,10 @@ class File extends Model
: get_pretty_name($this->attributes['basename'], $this->attributes['name'], $this->attributes['mimetype']);
$header = [
'ResponseAcceptRanges' => 'bytes',
'ResponseContentType' => $this->attributes['mimetype'],
'ResponseContentLength' => $this->attributes['filesize'],
'ResponseContentRange' => 'bytes 0-600/' . $this->attributes['filesize'],
'ResponseAcceptRanges' => 'bytes',
'ResponseContentType' => $this->attributes['mimetype'],
'ResponseContentLength' => $this->attributes['filesize'],
'ResponseContentRange' => 'bytes 0-600/' . $this->attributes['filesize'],
'ResponseContentDisposition' => 'attachment; filename=' . $file_pretty_name,
];
@@ -167,8 +167,8 @@ class File extends Model
$name = Str::slug($array['name'], ' ');
return [
'id' => $this->id,
'name' => $name,
'id' => $this->id,
'name' => $name,
'nameNgrams' => utf8_encode((new TNTIndexer)->buildTrigrams(implode(', ', [$name]))),
];
}

View File

@@ -64,8 +64,8 @@ class Folder extends Model
$name = Str::slug($array['name'], ' ');
return [
'id' => $this->id,
'name' => $name,
'id' => $this->id,
'name' => $name,
'nameNgrams' => utf8_encode((new TNTIndexer)->buildTrigrams(implode(', ', [$name]))),
];
}

View File

@@ -12,9 +12,14 @@ class Invoice extends Model
protected $casts = [
'seller' => 'array',
'client' => 'array',
'bag' => 'array',
'bag' => 'array',
];
public function getMimetype()
{
return 'pdf';
}
/**
* @return \Illuminate\Database\Eloquent\Relations\HasOne
*/

View File

@@ -0,0 +1,36 @@
<?php
namespace App\Models\Oasis;
use Auth;
use App\Models\User;
use Illuminate\Support\Str;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class SubscriptionRequest extends Model
{
use HasFactory;
protected $fillable = [
'requested_plan', 'creator', 'status',
];
public $incrementing = false;
protected $keyType = 'string';
public function user()
{
return $this->hasOne(User::class, 'id', 'user_id');
}
protected static function boot()
{
parent::boot();
static::creating(function ($order) {
$order->id = (string) Str::uuid();
$order->creator = Auth::user()->email ?? $order->creator;
});
}
}

View File

@@ -1,6 +1,7 @@
<?php
namespace App\Models;
use App\Traits\Oasis;
use ByteUnits\Metric;
use Illuminate\Support\Str;
use Laravel\Cashier\Billable;
@@ -11,12 +12,14 @@ use Kyslik\ColumnSortable\Sortable;
use App\Notifications\ResetPassword;
use Illuminate\Support\Facades\Storage;
use Illuminate\Notifications\Notifiable;
use Makingcg\Invoice\App\Traits\Invoiceable;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable, Billable, Sortable, HasFactory, HasApiTokens;
use Oasis, Invoiceable;
protected $guarded = [
'id',
@@ -32,7 +35,7 @@ class User extends Authenticatable
];
protected $casts = [
'id' => 'string',
'id' => 'string',
'email_verified_at' => 'datetime',
];
@@ -85,15 +88,15 @@ class User extends Authenticatable
// Get user storage usage
if (! $is_storage_limit) {
return [
'used' => $this->used_capacity,
'used' => $this->used_capacity,
'used_formatted' => Metric::bytes($this->used_capacity)->format(),
];
}
return [
'used' => (float) get_storage_fill_percentage($this->used_capacity, $this->settings->storage_capacity),
'used_formatted' => get_storage_fill_percentage($this->used_capacity, $this->settings->storage_capacity) . '%',
'capacity' => $this->settings->storage_capacity,
'used' => (float) get_storage_fill_percentage($this->used_capacity, $this->settings->storage_capacity),
'used_formatted' => get_storage_fill_percentage($this->used_capacity, $this->settings->storage_capacity) . '%',
'capacity' => $this->settings->storage_capacity,
'capacity_formatted' => format_gigabytes($this->settings->storage_capacity),
];
}
@@ -135,13 +138,13 @@ class User extends Authenticatable
public function setBilling($billing)
{
$this->settings()->update([
'address' => $billing['billing_address'],
'city' => $billing['billing_city'],
'country' => $billing['billing_country'],
'name' => $billing['billing_name'],
'address' => $billing['billing_address'],
'city' => $billing['billing_city'],
'country' => $billing['billing_country'],
'name' => $billing['billing_name'],
'phone_number' => $billing['billing_phone_number'],
'postal_code' => $billing['billing_postal_code'],
'state' => $billing['billing_state'],
'postal_code' => $billing['billing_postal_code'],
'state' => $billing['billing_state'],
]);
return $this->settings;

View File

@@ -0,0 +1,72 @@
<?php
namespace App\Notifications\Oasis;
use Laravel\Cashier\Cashier;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Notifications\Messages\MailMessage;
class PaymentRequiredNotification extends Notification
{
use Queueable;
/**
* Create a new notification instance.
*
* @param $order
* @param $plan
*/
public function __construct($order, $plan)
{
$this->order = $order;
$this->plan = $plan;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['mail'];
}
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
$url = url("/platba/{$this->order['id']}");
return (new MailMessage)
->subject(__t('mail_order_subject'))
->greeting(__t('mail_greeting'))
->line(__t('mail_order_line_1'))
->line(__t('mail_tariff', [
'name' => $this->plan['product']['name'],
'storage' => Cashier::formatAmount($this->plan['plan']['amount']),
'price' => format_gigabytes($this->plan['product']['metadata']['capacity']),
]))
->action(__t('mail_activation_action'), $url)
->line(__t('mail_order_line_2'))
->line(__t('mail_order_line_3'))
->salutation(__t('mail_salutation'));
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
* @return array
*/
public function toArray($notifiable)
{
return [
];
}
}

View File

@@ -0,0 +1,72 @@
<?php
namespace App\Notifications\Oasis;
use Laravel\Cashier\Cashier;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Notifications\Messages\MailMessage;
class ReminderForPaymentRequiredNotification extends Notification
{
use Queueable;
/**
* Create a new notification instance.
*
* @param $order
* @param $plan
*/
public function __construct($order, $plan)
{
$this->order = $order;
$this->plan = $plan;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['mail'];
}
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
$url = url("/platba/{$this->order['id']}");
return (new MailMessage)
->subject(__t('mail_order_subject'))
->greeting(__t('mail_greeting'))
->line(__t('mail_reminder_line_1'))
->line(__t('mail_tariff', [
'name' => $this->plan['product']['name'],
'storage' => Cashier::formatAmount($this->plan['plan']['amount']),
'price' => format_gigabytes($this->plan['product']['metadata']['capacity']),
]))
->line(__t('mail_reminder_line_2'))
->action(__t('mail_activation_action'), $url)
->line(__t('mail_reminder_line_3'))
->salutation(__t('mail_salutation'));
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
* @return array
*/
public function toArray($notifiable)
{
return [
];
}
}

View File

@@ -39,6 +39,8 @@ class RouteServiceProvider extends ServiceProvider
*/
public function map()
{
$this->mapOasisRoutes();
$this->mapApiRoutes();
$this->mapShareRoutes();
@@ -130,4 +132,11 @@ class RouteServiceProvider extends ServiceProvider
->namespace($this->namespace)
->group(base_path('routes/setup.php'));
}
// Oasis
protected function mapOasisRoutes()
{
Route::namespace($this->namespace)
->group(base_path('routes/oasis.php'));
}
}

View File

@@ -20,15 +20,15 @@ class DemoService
public function create_folder($request)
{
return [
'user_id' => 1,
'id' => Str::uuid(),
'parent_id' => random_int(1000, 9999),
'name' => $request->name,
'type' => 'folder',
'author' => $request->user() ? 'user' : 'visitor',
'items' => '0',
'color' => isset($request->icon['color']) ? $request->icon['color'] : null,
'emoji' => isset($request->icon['emoji']) ? $request->icon['emoji'] : null,
'user_id' => 1,
'id' => Str::uuid(),
'parent_id' => random_int(1000, 9999),
'name' => $request->name,
'type' => 'folder',
'author' => $request->user() ? 'user' : 'visitor',
'items' => '0',
'color' => isset($request->icon['color']) ? $request->icon['color'] : null,
'emoji' => isset($request->icon['emoji']) ? $request->icon['emoji'] : null,
'updated_at' => now()->format('j M Y \a\t H:i'),
'created_at' => now()->format('j M Y \a\t H:i'),
];
@@ -63,7 +63,7 @@ class DemoService
}
return [
'id' => $request->id,
'id' => $request->id,
'name' => $request->name,
'type' => $request->type,
];
@@ -86,16 +86,16 @@ class DemoService
$filetype = get_file_type($file->getMimeType());
return [
'id' => Str::uuid(),
'folder_id' => $request->parent_id,
'thumbnail' => 'data:' . $request->file('file')->getMimeType() . ';base64, ' . base64_encode(file_get_contents($request->file('file'))),
'name' => $file->getClientOriginalName(),
'basename' => $filename,
'mimetype' => $file->getClientOriginalExtension(),
'filesize' => Metric::bytes($filesize)->format(),
'type' => $filetype,
'file_url' => 'https://vuefilemanager.hi5ve.digital/assets/vue-file-manager-preview.jpg',
'author' => $request->user() ? 'user' : 'visitor',
'id' => Str::uuid(),
'folder_id' => $request->parent_id,
'thumbnail' => 'data:' . $request->file('file')->getMimeType() . ';base64, ' . base64_encode(file_get_contents($request->file('file'))),
'name' => $file->getClientOriginalName(),
'basename' => $filename,
'mimetype' => $file->getClientOriginalExtension(),
'filesize' => Metric::bytes($filesize)->format(),
'type' => $filetype,
'file_url' => 'https://vuefilemanager.hi5ve.digital/assets/vue-file-manager-preview.jpg',
'author' => $request->user() ? 'user' : 'visitor',
'created_at' => now()->format('j M Y \a\t H:i'),
'updated_at' => now()->format('j M Y \a\t H:i'),
];

View File

@@ -88,9 +88,9 @@ class FileManagerService
// Store zip record
return Zip::create([
'user_id' => $shared->user_id ?? Auth::id(),
'user_id' => $shared->user_id ?? Auth::id(),
'shared_token' => $shared->token ?? null,
'basename' => $zip_name,
'basename' => $zip_name,
]);
}
@@ -146,9 +146,9 @@ class FileManagerService
// Store zip record
return Zip::create([
'user_id' => $shared->user_id ?? Auth::id(),
'user_id' => $shared->user_id ?? Auth::id(),
'shared_token' => $shared->token ?? null,
'basename' => $zip_name,
'basename' => $zip_name,
]);
}
@@ -163,11 +163,11 @@ class FileManagerService
{
return Folder::create([
'parent_id' => $request->parent_id,
'author' => $shared ? 'visitor' : 'user',
'user_id' => $shared ? $shared->user_id : Auth::id(),
'name' => $request->name,
'color' => $request->color ?? null,
'emoji' => $request->emoji ?? null,
'author' => $shared ? 'visitor' : 'user',
'user_id' => $shared ? $shared->user_id : Auth::id(),
'name' => $request->name,
'color' => $request->color ?? null,
'emoji' => $request->emoji ?? null,
]);
}
@@ -398,16 +398,16 @@ class FileManagerService
// Return new file
return UserFile::create([
'mimetype' => get_file_type_from_mimetype($file_mimetype),
'type' => get_file_type($file_mimetype),
'mimetype' => get_file_type_from_mimetype($file_mimetype),
'type' => get_file_type($file_mimetype),
'folder_id' => $request->folder_id,
'metadata' => $metadata,
'name' => $request->filename,
'basename' => $disk_file_name,
'author' => $shared ? 'visitor' : 'user',
'metadata' => $metadata,
'name' => $request->filename,
'basename' => $disk_file_name,
'author' => $shared ? 'visitor' : 'user',
'thumbnail' => $thumbnail,
'filesize' => $file_size,
'user_id' => $user_id,
'filesize' => $file_size,
'user_id' => $user_id,
]);
}
}

View File

@@ -145,7 +145,7 @@ class HelperService
// TODO: replace local files with temp folder
$uploader = new MultipartUploader($client, config('filesystems.disks.local.root') . "/files/$user_id/$file", [
'bucket' => $adapter->getBucket(),
'key' => "files/$user_id/$file",
'key' => "files/$user_id/$file",
]);
try {
@@ -228,10 +228,10 @@ class HelperService
return response()
->download(Storage::path($path), $pretty_name, [
'Accept-Ranges' => 'bytes',
'Content-Type' => Storage::mimeType($path),
'Content-Length' => Storage::size($path),
'Content-Range' => 'bytes 0-600/' . Storage::size($path),
'Accept-Ranges' => 'bytes',
'Content-Type' => Storage::mimeType($path),
'Content-Length' => Storage::size($path),
'Content-Range' => 'bytes 0-600/' . Storage::size($path),
'Content-Disposition' => "attachment; filename=$pretty_name",
]);
}

View File

@@ -28,9 +28,9 @@ class LanguageService
$translations = $translations[strtolower($license)]
->map(function ($value, $key) use ($locale) {
return [
'lang' => $locale,
'lang' => $locale,
'value' => $value,
'key' => $key,
'key' => $key,
];
})->toArray();
@@ -79,9 +79,9 @@ class LanguageService
$translations = $newbies
->map(function ($value, $key) use ($locale) {
return [
'lang' => $locale,
'lang' => $locale,
'value' => $value,
'key' => $key,
'key' => $key,
];
})->toArray();

View File

@@ -0,0 +1,253 @@
<?php
/**
* Parser pre vyhladavanie a vypis z obchodneho registra ČR
* Lookup service for Czech commercial register (www.justice.cz)
*
* Version 1.0.0 (released 05.12.2019)
* (c) 2019 lubosdz@gmail.com
*
* ------------------------------------------------------------------
* Disclaimer / Prehlásenie:
* Kód poskytnutý je bez záruky a môže kedykoľvek prestať fungovať.
* Jeho funkčnosť je striktne naviazaná na generovanú štruktúru HTML elementov.
* Autor nie je povinný udržiavať kód aktuálny a funkčný, ani neposkytuje ku nemu žiadnu podporu.
* Autor nezodpovedá za nesprávne použitie kódu.
* ------------------------------------------------------------------
*
* Usage example:
* --------------
* $connector = new ConnectorJusticeCz;
* $out = $connector->findByNazev('auto');
* $out = $connector->findByIco('44315945');
* echo ''.print_r($out, 1).'';
*/
namespace App\Services\Oasis;
class CzechRegisterSearchService
{
/**
* @var string Target server URL base
*/
const URL_SERVER = 'https://or.justice.cz/ias/ui/rejstrik-$firma';
/**
* @var int Max. dlzka nazvu pre autocomplete options
*/
public $labelMaxChars = 30;
/**
* Vyhlada zoznam subjektov podla presneho ICO, ciastkove ICO nie je povolene
* @param string $ico 8-miestne cislo, e.g. 29243831 or 64612023
*/
public function findByIco($ico)
{
$response = [];
$ico = preg_replace('/[^\d]/', '', $ico);
if (preg_match('/^\d{8}$/', $ico)) {
$url = self::URL_SERVER . '?ico=' . $ico;
$response = file_get_contents($url);
$response = self::extractSubjects($response);
}
return $response;
}
/**
* Vyhlada zoznam subjektov podla ciastkoveho nazvu
* @param string $nazev , e.g. "pojisteni"
*/
public function findByNazev($nazev)
{
$response = [];
if ($nazev) {
$nazev = trim($nazev);
$url = self::URL_SERVER . '?nazev=' . urlencode($nazev);
$response = file_get_contents($url);
$response = self::extractSubjects($response);
}
return $response;
}
/**
* Vyhlada zoznam subjektov podla presneho ICO, ciastkove ICO nie je povolene
* @param string $ico 8-miestne cislo, e.g. 12345678
*/
public function getDetailByICO($ico)
{
$response = [];
$ico = preg_replace('/[^\d]/', '', $ico);
if (preg_match('/^\d{8}$/', $ico)) {
$url = self::URL_SERVER . '?ico=' . $ico;
$response = file_get_contents($url);
if ($response) {
$response = self::extractSubjects($response);
if (! empty($response[0])) {
$response = $response[0];
}
}
}
return $response;
}
/**
* Return matched formatted for autocomplete dropdown list
* @param string $term Searched matching string
* @param int how many items to return, 1 - 50 (justice vrati max. 50 zaznamov)
*/
public function findForAutocomplete($term, $size = 15)
{
$out = [];
$size = intval($size);
if ($term && $size > 0 && mb_strlen($term, 'utf-8') >= 3) {
// Justice vrati vysledok pre min. 3 znaky
if (preg_match('/^\d{8}$/', $term)) {
$subjects = $this->findByIco($term);
} else {
$subjects = $this->findByNazev($term);
}
}
if (! empty($subjects) && is_array($subjects)) {
$subjects = array_slice($subjects, 0, $size); // return first $size matches
foreach ($subjects as &$subject) {
$subject['shortname'] = $subject['name'];
// cut off too long names
if (mb_strlen($subject['shortname'], 'utf-8') > $this->labelMaxChars) {
$subject['shortname'] = mb_substr($subject['shortname'], 0, $this->labelMaxChars - 3, 'utf-8') . ' ..';
}
}
foreach ($subjects as $subject) {
if (! empty($subject['ico'])) {
$out[] = [
'value' => $subject['ico'],
'label' => "{$subject['shortname']} (IČO: {$subject['ico']})",
];
}
}
}
return $out;
}
/**
* Vrati zoznam najdenych subjektov s udajmi
* @param string $html HTML response zo servera justice.cz
* @return [name, ico, city, addr_streetnr, addr_city, addr_zip, ..]
*/
protected static function extractSubjects($html)
{
// ensure valid XHTML markup
if (! extension_loaded('tidy')) {
throw new \Exception('Missing extension [tidy].');
}
$tidy = new \tidy();
$html = $tidy->repairString($html, [
'output-xhtml' => true,
'show-body-only' => true,
], 'utf8');
// purify whitespaces - vkladaju \n alebo
$html = strtr($html, [
' ' => ' ',
]);
$html = preg_replace('/\s+/', ' ', $html);
// load XHTML into DOM document
$xml = new \DOMDocument('1.0', 'utf-8');
$xml->loadXML($html);
$xpath = new \DOMXPath($xml);
$rows = $xpath->query('//table[@class="result-details"]/tbody');
$out = [];
if ($rows->length) {
foreach ($rows as $row) {
// Nazev
$nodeList = $xpath->query('./tr[1]/td[1]', $row);
if (! $nodeList->length) {
continue; // nazev je povinny
}
$name = $nodeList->item(0)->nodeValue;
$name = preg_replace('/\s+/', ' ', $name); // viacnasobne inside spaces
// ICO
$nodeList = $xpath->query('./tr[1]/td[2]', $row);
$ico = $nodeList->length ? $nodeList->item(0)->nodeValue : '';
// adresa - neda sa spolahnut na poradie prvkov :-(
$city = '';
$nodeList = $xpath->query('./tr[3]/td[1]', $row);
if ($nodeList->length) {
$addr = trim($nodeList->item(0)->nodeValue);
if (preg_match('/,\s*(\d{3} ?\d{2})\s+(.+)$/', $addr, $match)) {
// Příborská 597, Místek, 738 01 Frýdek-Místek - nazov obce za PSC, prva je ulice a cislo
$city = $addr_city = $match[2];
list($addr_streetnr) = explode(',', $addr);
$addr_zip = $match[1];
} elseif (preg_match('/,\s*PSČ\s+(\d{3} ?\d{2})$/', $addr, $match)) {
// Řevnice, ČSLA 118, okres Praha-západ, PSČ 25230 - PSC na konci, obec je prva, ulice a cislo druha
list($city, $addr_streetnr) = explode(',', $addr);
$addr_city = $city;
$addr_zip = $match[1];
} elseif (! preg_match('/\d{3} ?\d{2}/', $addr, $match)) {
// Ústí nad Labem, Masarykova 74 - bez PSC - obec, ulice a cislo
$addr_streetnr = $addr_zip = '';
if (false !== strpos($addr, ',')) {
list($city, $addr_streetnr) = explode(',', $addr);
} else {
list($city) = explode(',', $addr);
}
$addr_city = $city;
}
// "Praha 10 - Dolní Měcholupy" -> Praha 10, pozn: Frydek-Mistek nema medzeru okolo pomlcky
// whoops, avsak ani Ostrana-Hontice a dalsie .. :-( Pre city potrebujeme kratky nazov do 10-15 pismen
list($city) = explode('-', $city);
// Praha 5 -> Praha
$city = preg_replace('/\d/', '', $city);
// viacnasobne spaces
$city = preg_replace('/\s+/', ' ', $city);
}
$out[] = [
'name' => self::trimQuotes($name),
'ico' => preg_replace('/[^\d]/', '', $ico),
'city' => self::trimQuotes($city),
// pre polia s adresou konzistentne so smartform naseptavacem
'addr_city' => self::trimQuotes($addr_city),
'addr_zip' => preg_replace('/[^\d]/', '', $addr_zip),
'addr_streetnr' => self::trimQuotes($addr_streetnr),
// len pre kontrolu - plna povodna adresa
'addr_full' => self::trimQuotes($addr),
];
}
}
return $out;
}
/**
* Vyhodi quotes z textu, aby neposkodilo HTML atributy
* @param string $s
*/
protected static function trimQuotes($s)
{
return trim(strtr($s, ['"' => '', "'" => '']));
}
}

View File

@@ -0,0 +1,21 @@
<?php
namespace App\Services\Oasis;
use App\Models\User;
use App\Models\Oasis\Invoice;
use Illuminate\Contracts\View\View;
use Illuminate\Contracts\View\Factory;
use Illuminate\Contracts\Foundation\Application;
class OasisDevService
{
/**
* @return Application|Factory|View
*/
public function get_invoice_view()
{
return view('oasis.invoices.invoice')
->with('invoice', Invoice::first())
->with('user', User::whereEmail('howdy@hi5ve.digital')->first());
}
}

View File

@@ -0,0 +1,36 @@
<?php
namespace App\Services\Oasis;
use Carbon\Carbon;
use App\Services\StripeService;
use App\Models\Oasis\SubscriptionRequest;
use App\Notifications\Oasis\ReminderForPaymentRequiredNotification;
class OasisService
{
/**
* Get requested subscription requests and remind via
* email to activate order
*/
public function order_reminder()
{
SubscriptionRequest::whereStatus('requested')
->get()
->each(function ($request) {
// Get diffInHours
$diff = Carbon::parse($request->created_at)
->diffInHours(Carbon::now());
// Send order reminder
if ($diff == 8) {
$plan = resolve(StripeService::class)
->getPlan($request->requested_plan);
$request->user->notify(new ReminderForPaymentRequiredNotification(
$request,
$plan
));
}
});
}
}

View File

@@ -56,12 +56,12 @@ class SetupService
public function seed_default_language()
{
Language::create([
'name' => 'English',
'name' => 'English',
'locale' => 'en',
]);
Setting::create([
'name' => 'language',
'name' => 'language',
'value' => 'en',
]);
}

View File

@@ -69,10 +69,10 @@ class StripeService
$tax = $amount * ($rate['percentage'] / 100);
array_push($rates_public, [
'id' => $rate['id'],
'active' => $rate['active'],
'country' => $rate['country'],
'percentage' => $rate['percentage'],
'id' => $rate['id'],
'active' => $rate['active'],
'country' => $rate['country'],
'percentage' => $rate['percentage'],
'plan_price_formatted' => Cashier::formatAmount(round($amount + $tax)),
]);
}
@@ -174,14 +174,14 @@ class StripeService
public function updateCustomerDetails($user)
{
$user->updateStripeCustomer([
'name' => $user->settings->name,
'phone' => $user->settings->phone_number,
'name' => $user->settings->name,
'phone' => $user->settings->phone_number,
'address' => [
'line1' => $user->settings->address,
'city' => $user->settings->city,
'country' => $user->settings->country,
'line1' => $user->settings->address,
'city' => $user->settings->city,
'country' => $user->settings->country,
'postal_code' => $user->settings->postal_code,
'state' => $user->settings->state,
'state' => $user->settings->state,
],
'preferred_locales' => [
$user->settings->country, 'en',
@@ -211,7 +211,7 @@ class StripeService
// Push data to $plan container
if ($product['active'] && isset($product['metadata']['capacity'])) {
array_push($plans, [
'plan' => $plan,
'plan' => $plan,
'product' => $product,
]);
}
@@ -243,7 +243,7 @@ class StripeService
// Push data to $plan container
if ($product['active'] && isset($product['metadata']['capacity'])) {
array_push($plans, [
'plan' => $plan,
'plan' => $plan,
'product' => $product,
]);
}
@@ -270,7 +270,7 @@ class StripeService
$product = $this->stripe->products()->find($plan['product']);
return [
'plan' => $plan,
'plan' => $plan,
'product' => $product,
];
});
@@ -286,34 +286,34 @@ class StripeService
{
if ($data instanceof Request) {
$plan = [
'name' => $data->input('attributes.name'),
'name' => $data->input('attributes.name'),
'description' => $data->input('attributes.description'),
'price' => $data->input('attributes.price'),
'capacity' => $data->input('attributes.capacity'),
'price' => $data->input('attributes.price'),
'capacity' => $data->input('attributes.capacity'),
];
} else {
$plan = [
'name' => $data['attributes']['name'],
'name' => $data['attributes']['name'],
'description' => $data['attributes']['description'],
'price' => $data['attributes']['price'],
'capacity' => $data['attributes']['capacity'],
'price' => $data['attributes']['price'],
'capacity' => $data['attributes']['capacity'],
];
}
$product = $this->stripe->products()->create([
'name' => $plan['name'],
'name' => $plan['name'],
'description' => $plan['description'],
'metadata' => [
'metadata' => [
'capacity' => $plan['capacity'],
],
]);
$plan = $this->stripe->plans()->create([
'id' => Str::slug($plan['name']),
'amount' => $plan['price'],
'id' => Str::slug($plan['name']),
'amount' => $plan['price'],
'currency' => config('cashier.currency'),
'interval' => 'month',
'product' => $product['id'],
'product' => $product['id'],
]);
return compact('plan', 'product');

12
app/Traits/Oasis.php Normal file
View File

@@ -0,0 +1,12 @@
<?php
namespace App\Traits;
use App\Models\Oasis\SubscriptionRequest;
trait Oasis
{
public function subscriptionRequest()
{
return $this->hasOne(SubscriptionRequest::class);
}
}

View File

@@ -23,7 +23,7 @@
"laravel/cashier": "^12.9.1",
"laravel/fortify": "^1.7.7",
"laravel/framework": "^8.30.1",
"laravel/sanctum": "^2.9",
"laravel/sanctum": "^2.11.0",
"laravel/tinker": "^2.6.1",
"laravel/ui": "^3.2.0",
"league/flysystem-aws-s3-v3": "^1.0.29",
@@ -32,7 +32,8 @@
"spatie/laravel-backup": "^6.15",
"spatie/laravel-tail": "^4.3",
"teamtnt/laravel-scout-tntsearch-driver": "^11.1.0",
"vimeo/psalm": "^4.7"
"vimeo/psalm": "^4.7",
"makingcg/vuefilemanager-invoicing": "dev-master"
},
"require-dev": {
"ext-json": "*",
@@ -44,6 +45,12 @@
"nunomaduro/collision": "^5.3.0",
"phpunit/phpunit": "^9.5.2"
},
"repositories": [
{
"type": "github",
"url": "https://github.com/MakingCG/vuefilemanager-invoicing"
}
],
"config": {
"optimize-autoloader": true,
"preferred-install": "dist",

654
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -191,44 +191,44 @@ return [
*/
'aliases' => [
'App' => Illuminate\Support\Facades\App::class,
'Arr' => Illuminate\Support\Arr::class,
'Artisan' => Illuminate\Support\Facades\Artisan::class,
'Auth' => Illuminate\Support\Facades\Auth::class,
'Blade' => Illuminate\Support\Facades\Blade::class,
'Broadcast' => Illuminate\Support\Facades\Broadcast::class,
'Bus' => Illuminate\Support\Facades\Bus::class,
'Cache' => Illuminate\Support\Facades\Cache::class,
'Config' => Illuminate\Support\Facades\Config::class,
'Cookie' => Illuminate\Support\Facades\Cookie::class,
'Crypt' => Illuminate\Support\Facades\Crypt::class,
'DB' => Illuminate\Support\Facades\DB::class,
'Eloquent' => Illuminate\Database\Eloquent\Model::class,
'Event' => Illuminate\Support\Facades\Event::class,
'File' => Illuminate\Support\Facades\File::class,
'Gate' => Illuminate\Support\Facades\Gate::class,
'Hash' => Illuminate\Support\Facades\Hash::class,
'Lang' => Illuminate\Support\Facades\Lang::class,
'Log' => Illuminate\Support\Facades\Log::class,
'Mail' => Illuminate\Support\Facades\Mail::class,
'App' => Illuminate\Support\Facades\App::class,
'Arr' => Illuminate\Support\Arr::class,
'Artisan' => Illuminate\Support\Facades\Artisan::class,
'Auth' => Illuminate\Support\Facades\Auth::class,
'Blade' => Illuminate\Support\Facades\Blade::class,
'Broadcast' => Illuminate\Support\Facades\Broadcast::class,
'Bus' => Illuminate\Support\Facades\Bus::class,
'Cache' => Illuminate\Support\Facades\Cache::class,
'Config' => Illuminate\Support\Facades\Config::class,
'Cookie' => Illuminate\Support\Facades\Cookie::class,
'Crypt' => Illuminate\Support\Facades\Crypt::class,
'DB' => Illuminate\Support\Facades\DB::class,
'Eloquent' => Illuminate\Database\Eloquent\Model::class,
'Event' => Illuminate\Support\Facades\Event::class,
'File' => Illuminate\Support\Facades\File::class,
'Gate' => Illuminate\Support\Facades\Gate::class,
'Hash' => Illuminate\Support\Facades\Hash::class,
'Lang' => Illuminate\Support\Facades\Lang::class,
'Log' => Illuminate\Support\Facades\Log::class,
'Mail' => Illuminate\Support\Facades\Mail::class,
'Notification' => Illuminate\Support\Facades\Notification::class,
'Password' => Illuminate\Support\Facades\Password::class,
'Queue' => Illuminate\Support\Facades\Queue::class,
'Redirect' => Illuminate\Support\Facades\Redirect::class,
'Redis' => Illuminate\Support\Facades\Redis::class,
'Request' => Illuminate\Support\Facades\Request::class,
'Response' => Illuminate\Support\Facades\Response::class,
'Route' => Illuminate\Support\Facades\Route::class,
'Schema' => Illuminate\Support\Facades\Schema::class,
'Session' => Illuminate\Support\Facades\Session::class,
'Storage' => Illuminate\Support\Facades\Storage::class,
'Str' => Illuminate\Support\Str::class,
'URL' => Illuminate\Support\Facades\URL::class,
'Validator' => Illuminate\Support\Facades\Validator::class,
'View' => Illuminate\Support\Facades\View::class,
'Image' => Intervention\Image\Facades\Image::class,
'Stripe' => Cartalyst\Stripe\Laravel\Facades\Stripe::class,
'Crawler' => Jaybizzle\LaravelCrawlerDetect\Facades\LaravelCrawlerDetect::class,
'Password' => Illuminate\Support\Facades\Password::class,
'Queue' => Illuminate\Support\Facades\Queue::class,
'Redirect' => Illuminate\Support\Facades\Redirect::class,
'Redis' => Illuminate\Support\Facades\Redis::class,
'Request' => Illuminate\Support\Facades\Request::class,
'Response' => Illuminate\Support\Facades\Response::class,
'Route' => Illuminate\Support\Facades\Route::class,
'Schema' => Illuminate\Support\Facades\Schema::class,
'Session' => Illuminate\Support\Facades\Session::class,
'Storage' => Illuminate\Support\Facades\Storage::class,
'Str' => Illuminate\Support\Str::class,
'URL' => Illuminate\Support\Facades\URL::class,
'Validator' => Illuminate\Support\Facades\Validator::class,
'View' => Illuminate\Support\Facades\View::class,
'Image' => Intervention\Image\Facades\Image::class,
'Stripe' => Cartalyst\Stripe\Laravel\Facades\Stripe::class,
'Crawler' => Jaybizzle\LaravelCrawlerDetect\Facades\LaravelCrawlerDetect::class,
//'Madzipper' => Madnest\Madzipper\Madzipper::class,
],

View File

@@ -13,7 +13,7 @@ return [
*/
'defaults' => [
'guard' => 'web',
'guard' => 'web',
'passwords' => 'users',
],
@@ -36,14 +36,14 @@ return [
'guards' => [
'web' => [
'driver' => 'session',
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'driver' => 'token',
'provider' => 'users',
'hash' => false,
'hash' => false,
],
],
@@ -67,7 +67,7 @@ return [
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
'model' => App\Models\User::class,
],
// 'users' => [
@@ -94,8 +94,8 @@ return [
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
'table' => 'password_resets',
'expire' => 60,
'throttle' => 60,
],
],

View File

@@ -145,12 +145,12 @@ return [
*/
'notifications' => [
'notifications' => [
\Spatie\Backup\Notifications\Notifications\BackupHasFailed::class => ['mail'],
\Spatie\Backup\Notifications\Notifications\BackupHasFailed::class => ['mail'],
\Spatie\Backup\Notifications\Notifications\UnhealthyBackupWasFound::class => ['mail'],
\Spatie\Backup\Notifications\Notifications\CleanupHasFailed::class => ['mail'],
\Spatie\Backup\Notifications\Notifications\BackupWasSuccessful::class => ['mail'],
\Spatie\Backup\Notifications\Notifications\HealthyBackupWasFound::class => ['mail'],
\Spatie\Backup\Notifications\Notifications\CleanupWasSuccessful::class => ['mail'],
\Spatie\Backup\Notifications\Notifications\CleanupHasFailed::class => ['mail'],
\Spatie\Backup\Notifications\Notifications\BackupWasSuccessful::class => ['mail'],
\Spatie\Backup\Notifications\Notifications\HealthyBackupWasFound::class => ['mail'],
\Spatie\Backup\Notifications\Notifications\CleanupWasSuccessful::class => ['mail'],
],
/*
@@ -189,10 +189,10 @@ return [
*/
'monitor_backups' => [
[
'name' => env('APP_NAME', 'laravel-backup'),
'disks' => ['local'],
'name' => env('APP_NAME', 'laravel-backup'),
'disks' => ['local'],
'health_checks' => [
\Spatie\Backup\Tasks\Monitor\HealthChecks\MaximumAgeInDays::class => 1,
\Spatie\Backup\Tasks\Monitor\HealthChecks\MaximumAgeInDays::class => 1,
\Spatie\Backup\Tasks\Monitor\HealthChecks\MaximumStorageInMegabytes::class => 5000,
],
],

View File

@@ -29,18 +29,18 @@ return [
'connections' => [
'pusher' => [
'driver' => 'pusher',
'key' => env('PUSHER_APP_KEY'),
'secret' => env('PUSHER_APP_SECRET'),
'app_id' => env('PUSHER_APP_ID'),
'driver' => 'pusher',
'key' => env('PUSHER_APP_KEY'),
'secret' => env('PUSHER_APP_SECRET'),
'app_id' => env('PUSHER_APP_ID'),
'options' => [
'cluster' => env('PUSHER_APP_CLUSTER'),
'useTLS' => true,
'useTLS' => true,
],
],
'redis' => [
'driver' => 'redis',
'driver' => 'redis',
'connection' => 'default',
],

View File

@@ -40,20 +40,20 @@ return [
],
'database' => [
'driver' => 'database',
'table' => 'cache',
'driver' => 'database',
'table' => 'cache',
'connection' => null,
],
'file' => [
'driver' => 'file',
'path' => storage_path('framework/cache/data'),
'path' => storage_path('framework/cache/data'),
],
'memcached' => [
'driver' => 'memcached',
'driver' => 'memcached',
'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),
'sasl' => [
'sasl' => [
env('MEMCACHED_USERNAME'),
env('MEMCACHED_PASSWORD'),
],
@@ -62,24 +62,24 @@ return [
],
'servers' => [
[
'host' => env('MEMCACHED_HOST', '127.0.0.1'),
'port' => env('MEMCACHED_PORT', 11211),
'host' => env('MEMCACHED_HOST', '127.0.0.1'),
'port' => env('MEMCACHED_PORT', 11211),
'weight' => 100,
],
],
],
'redis' => [
'driver' => 'redis',
'driver' => 'redis',
'connection' => 'cache',
],
'dynamodb' => [
'driver' => 'dynamodb',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),
'driver' => 'dynamodb',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),
'endpoint' => env('DYNAMODB_ENDPOINT'),
],
],

View File

@@ -41,7 +41,7 @@ return [
*/
'webhook' => [
'secret' => env('STRIPE_WEBHOOK_SECRET'),
'secret' => env('STRIPE_WEBHOOK_SECRET'),
'tolerance' => env('STRIPE_WEBHOOK_TOLERANCE', 300),
],

View File

@@ -4,177 +4,177 @@ return [
'pages' => [
[
'visibility' => 1,
'title' => 'Terms of Service',
'slug' => 'terms-of-service',
'content' => 'Laoreet cum hendrerit iaculis arcu phasellus congue et elementum, pharetra risus imperdiet aptent posuere rutrum parturient blandit, dapibus tellus ridiculus potenti aliquam sociis turpis. Nullam commodo eget laoreet risus cursus vel placerat, in dapibus sociis gravida faucibus sodales, fringilla potenti elit semper iaculis ullamcorper. Dignissim vulputate pretium montes pellentesque mollis, consectetur adipiscing curabitur semper sem rhoncus, litora viverra curae proin.',
'title' => 'Terms of Service',
'slug' => 'terms-of-service',
'content' => 'Laoreet cum hendrerit iaculis arcu phasellus congue et elementum, pharetra risus imperdiet aptent posuere rutrum parturient blandit, dapibus tellus ridiculus potenti aliquam sociis turpis. Nullam commodo eget laoreet risus cursus vel placerat, in dapibus sociis gravida faucibus sodales, fringilla potenti elit semper iaculis ullamcorper. Dignissim vulputate pretium montes pellentesque mollis, consectetur adipiscing curabitur semper sem rhoncus, litora viverra curae proin.',
],
[
'visibility' => 1,
'title' => 'Privacy Policy',
'slug' => 'privacy-policy',
'content' => 'Sit orci justo augue maecenas laoreet consectetur natoque magnis in viverra sagittis, himenaeos urna facilisis mus proin primis diam accumsan tristique inceptos. Primis quisque posuere sit praesent lobortis feugiat semper convallis facilisis, vivamus gravida ligula nostra curae eu donec duis parturient senectus, arcu dolor viverra penatibus natoque cum nisi commodo. Litora sociis mauris justo nullam suspendisse mattis maecenas nascetur congue phasellus cras ultricies posuere donec, dapibus egestas diam lacus ornare montes senectus tincidunt eu taciti sed consequat.',
'title' => 'Privacy Policy',
'slug' => 'privacy-policy',
'content' => 'Sit orci justo augue maecenas laoreet consectetur natoque magnis in viverra sagittis, himenaeos urna facilisis mus proin primis diam accumsan tristique inceptos. Primis quisque posuere sit praesent lobortis feugiat semper convallis facilisis, vivamus gravida ligula nostra curae eu donec duis parturient senectus, arcu dolor viverra penatibus natoque cum nisi commodo. Litora sociis mauris justo nullam suspendisse mattis maecenas nascetur congue phasellus cras ultricies posuere donec, dapibus egestas diam lacus ornare montes senectus tincidunt eu taciti sed consequat.',
],
[
'visibility' => 1,
'title' => 'Cookie Policy',
'slug' => 'cookie-policy',
'content' => 'Metus penatibus ligula dolor natoque non habitasse laoreet facilisis, libero vivamus eget semper vulputate interdum integer, phasellus lorem enim blandit consectetur nullam sollicitudin. Hendrerit interdum luctus ut in molestie himenaeos eros cum laoreet parturient est, eu lectus hac et netus viverra dictumst congue elit sem senectus litora, fames scelerisque adipiscing inceptos fringilla montes sociosqu suscipit auctor potenti. Elementum lacus vulputate viverra ac morbi ligula ipsum facilisi, sit eu imperdiet lacinia congue dis vitae.',
'title' => 'Cookie Policy',
'slug' => 'cookie-policy',
'content' => 'Metus penatibus ligula dolor natoque non habitasse laoreet facilisis, libero vivamus eget semper vulputate interdum integer, phasellus lorem enim blandit consectetur nullam sollicitudin. Hendrerit interdum luctus ut in molestie himenaeos eros cum laoreet parturient est, eu lectus hac et netus viverra dictumst congue elit sem senectus litora, fames scelerisque adipiscing inceptos fringilla montes sociosqu suscipit auctor potenti. Elementum lacus vulputate viverra ac morbi ligula ipsum facilisi, sit eu imperdiet lacinia congue dis vitae.',
],
],
'content' => [
'regular' => [
[
'name' => 'section_features',
'name' => 'section_features',
'value' => 1,
],
[
'name' => 'section_feature_boxes',
'name' => 'section_feature_boxes',
'value' => 1,
],
[
'name' => 'section_get_started',
'name' => 'section_get_started',
'value' => 1,
],
[
'name' => 'header_title',
'name' => 'header_title',
'value' => 'Simple <span class="text-theme">&</span> Powerful Personal Cloud Storage',
],
[
'name' => 'header_description',
'name' => 'header_description',
'value' => 'Your private cloud storage software build on Laravel & Vue.js. No limits & no monthly fees. Truly freedom.',
],
[
'name' => 'features_title',
'name' => 'features_title',
'value' => 'The Fastest Growing <span class="text-theme">File Manager</span> on the CodeCanyon Market',
],
[
'name' => 'features_description',
'name' => 'features_description',
'value' => 'Your private cloud storage software build on Laravel & Vue.js. No limits & no monthly fees. Truly freedom.',
],
[
'name' => 'feature_title_1',
'name' => 'feature_title_1',
'value' => 'Truly Freedom',
],
[
'name' => 'feature_description_1',
'name' => 'feature_description_1',
'value' => 'You have full control over VueFileManager, no third authorities will control your service or usage, only you.',
],
[
'name' => 'feature_title_2',
'name' => 'feature_title_2',
'value' => 'The Sky is the Limit',
],
[
'name' => 'feature_description_2',
'name' => 'feature_description_2',
'value' => 'VueFileManager is cloud storage software. You have to install and running application on your own server hosting.',
],
[
'name' => 'feature_title_3',
'name' => 'feature_title_3',
'value' => 'No Monthly Fees',
],
[
'name' => 'feature_description_3',
'name' => 'feature_description_3',
'value' => 'When you running VueFileManager on your own server hosting, anybody can\'t control your content or resell your user data. Your data is safe.',
],
[
'name' => 'get_started_title',
'name' => 'get_started_title',
'value' => 'Ready to Get <span class="text-theme">Started</span><br> With Us?',
],
[
'name' => 'get_started_description',
'name' => 'get_started_description',
'value' => 'Your private cloud storage software build on Laravel & Vue.js. No limits & no monthly fees. Truly freedom.',
],
[
'name' => 'footer_content',
'name' => 'footer_content',
'value' => '© 2021 Simple & Powerful Personal Cloud Storage. Developed by <a href="https://hi5ve.digital" target="_blank">Hi5Ve.Digital</a>',
],
[
'name' => 'allow_homepage',
'name' => 'allow_homepage',
'value' => 1,
],
[
'name' => 'app_color',
'name' => 'app_color',
'value' => '#00BC7E',
],
],
'extended' => [
[
'name' => 'section_features',
'name' => 'section_features',
'value' => 1,
],
[
'name' => 'section_feature_boxes',
'name' => 'section_feature_boxes',
'value' => 1,
],
[
'name' => 'section_pricing_content',
'name' => 'section_pricing_content',
'value' => 1,
],
[
'name' => 'section_get_started',
'name' => 'section_get_started',
'value' => 1,
],
[
'name' => 'header_title',
'name' => 'header_title',
'value' => 'Simple <span class="text-theme">&</span> Powerful Personal Cloud Storage',
],
[
'name' => 'header_description',
'name' => 'header_description',
'value' => 'Your private cloud storage software build on Laravel & Vue.js. No limits & no monthly fees. Truly freedom.',
],
[
'name' => 'features_title',
'name' => 'features_title',
'value' => 'The Fastest Growing <span class="text-theme">File Manager</span> on the CodeCanyon Market',
],
[
'name' => 'features_description',
'name' => 'features_description',
'value' => 'Your private cloud storage software build on Laravel & Vue.js. No limits & no monthly fees. Truly freedom.',
],
[
'name' => 'feature_title_1',
'name' => 'feature_title_1',
'value' => 'Truly Freedom',
],
[
'name' => 'feature_description_1',
'name' => 'feature_description_1',
'value' => 'You have full control over VueFileManager, no third authorities will control your service or usage, only you.',
],
[
'name' => 'feature_title_2',
'name' => 'feature_title_2',
'value' => 'The Sky is the Limit',
],
[
'name' => 'feature_description_2',
'name' => 'feature_description_2',
'value' => 'VueFileManager is cloud storage software. You have to install and running application on your own server hosting.',
],
[
'name' => 'feature_title_3',
'name' => 'feature_title_3',
'value' => 'No Monthly Fees',
],
[
'name' => 'feature_description_3',
'name' => 'feature_description_3',
'value' => 'When you running VueFileManager on your own server hosting, anybody can\'t control your content or resell your user data. Your data is safe.',
],
[
'name' => 'pricing_title',
'name' => 'pricing_title',
'value' => 'Pick the <span class="text-theme">Best Plan</span> For Your Needs',
],
[
'name' => 'pricing_description',
'name' => 'pricing_description',
'value' => 'Your private cloud storage software build on Laravel & Vue.js. No limits & no monthly fees. Truly freedom.',
],
[
'name' => 'get_started_title',
'name' => 'get_started_title',
'value' => 'Ready to Get <span class="text-theme">Started</span><br> With Us?',
],
[
'name' => 'get_started_description',
'name' => 'get_started_description',
'value' => 'Your private cloud storage software build on Laravel & Vue.js. No limits & no monthly fees. Truly freedom.',
],
[
'name' => 'footer_content',
'name' => 'footer_content',
'value' => '© 2021 Simple & Powerful Personal Cloud Storage. Developed by <a href="https://hi5ve.digital" target="_blank" class="text-theme">Hi5Ve.Digital</a>',
],
[
'name' => 'app_color',
'name' => 'app_color',
'value' => '#00BC7E',
],
],

View File

@@ -8,4 +8,290 @@
return [
'custom' => 'translation',
// On boarding
'successful_payment_with_password_creation' => 'Dakujeme, platba bola uspesne zaznamenana. V poslednom kroku si prosim vytvorte heslo pre Vas ucet.',
'pay_order_description' => 'Zaplacenim objednavky se Vas ucet automaticky zaktivuje a vytvori se Vam digitalni prostor pro Vase dulezite dokumenty.',
'payment_page.payment_gateway' => 'Platebni karta',
'payment_page.company' => 'Spolecnost',
'payment_page.ico' => 'ICO',
'payment_page.address' => 'Adresa',
// Mail notifications for ordering
'mail_greeting' => 'Vážený zákazníku,',
'mail_salutation' => 'S pozdravem a přáním hezkého dne, Tým Oasis Drive',
'mail_tariff' => 'Vámi vybraný tarif: :name - :storage za :price',
'mail_activation_action' => 'Pro aktivaci klikněte zde',
'mail_order_subject' => '🏝 Potvrzeni Objednavky - OasisDrive',
'mail_order_line_1' => 'Právě jste si úspěšně vytvořil registraci bezpečnostní datové služby OasisDrive.',
'mail_order_line_2' => 'Odkaz je platný 24 hodin.',
'mail_order_line_3' => 'Po dokončení registrace v odkazu Vám bude služba automaticky aktivována a lze ji ihned využívat.',
'mail_reminder_line_1' => 'Děkujeme za Vaši objednávku služby Oasis Drive pro bezpečné uložení Vašich firemních dokumentů.',
'mail_reminder_line_2' => 'Připomínáme dokončení aktivace služby a blížící se konec platnosti registračního odkazu:',
'mail_reminder_line_3' => 'Po dokončení registrace v odkazu Vám bude služba automaticky aktivována a lze ji ihned využívat.',
// Admin
'oasis.create_order' => 'Vytvorit objednavku',
'oasis.create_user' => 'Vytvorit Uzivatela',
// Homepage
'navigation.price' => 'Ceník',
'navigation.about-us' => 'O Nás',
'navigation.contact-and-support' => 'Kontakt a Podpora',
'try_drive' => 'Vyzkouset OasisDrive',
'more_info' => 'Více Informací',
'contact.ico' => 'ICO',
'contact.hq' => 'Sídlo',
'homepage_header_title' => 'Jednoduchý a Bezpečný Cloud vo Vrecku',
'homepage_header_description' => 'Virtuální šanon, vždy s tebou.',
'homepage_feature_title' => 'Proč je OasisDrive Výnimočný?',
'homepage_feature_description' => 'Cloudové uložiště je v podstatě virtuální šanon, kam uživatelé ukládají svá data, ke kterým se mohou přihlásit odkudkoli v nezávislosti na zařízení. OasisDrive umožňuje bezpečně chránit Vaše firemní data.',
'feature_1_title' => 'Bezpecnost na prvnim miste',
'feature_1_description' => 'Naše cloudové uložiště umožňuje bezpečně chránit Vaše firemní data. kdy využíváme několik vysoce zabezpečených serverů po Evropské unii a vícenásobným šifrováním souborů (tzv. kryptováním).',
'feature_2_title' => 'Bezpečnost v rámci GDPR',
'feature_2_description' => 'bezpečnost uložení dat v rámci evropské směrnice o GDPR a přidružených zákonů o zpracování a ochraně citlivých údajů. Naši klienti jsou tedy chráněni před zneužitím dat a tím pádem i před pokutami vyplývajícími z legislativy, které být astronomické.',
'feature_3_title' => 'Jednoduchost pouzivani',
'feature_3_description' => 'Naše cloudové uložiště umožňuje bezpečně chránit Vaše firemní data. kdy využíváme několik vysoce zabezpečených serverů po Evropské unii a vícenásobným šifrováním souborů (tzv. kryptováním).',
'homepage_pricing_title' => 'Kolik stoji OasisDrive?',
'homepage_pricing_description' => 'OasisDrive je dostupny v troch variantach. Ak presiahnete limit svojho balicka, mozete si navysit balik dat jednoduchym upgradom uctu.',
'homepage_about_us_title' => 'Kto Jsme?',
'homepage_about_us_description' => 'Jsme česká společnost, která pro fyzické a právnické osoby (živnostníky a firmy) poskytuje cloudové uložiště dle evropské směrnice (GDPR) a následného zákona o zpracování osobních údajů (zákon 110/2019 sb.).',
'homepage_about_us_line_1' => 'Zakládáme si na kvalitě a nejlepší možné bezpečnosti pro uchovávání a zpracování dat a dokumentů.',
'homepage_about_us_line_2' => 'Spolupracujeme rovněž se specialisty v oboru práva a IT.',
'homepage_about_us_line_3' => 'Důležitá je pro nás uživatelská jednoduchost, stoprocentní funkčnost a přehlednost.',
'homepage_about_us_line_4' => 'Bezpečnost uložení dat tak, jak nařizuje směrnice EU (GDPR) a zákon o zpracování osobních údajů.',
'homepage_contact_title' => 'Kontakt a Podpora',
'homepage_contact_description' => 'V pripade akychkolvek otazok nas nevahajte kontaktovat emailom, alebo na ktoromkolvek telefonnom cisle.',
'contact_company_title' => 'Společnost',
'contact_support_title' => 'Podpora',
'contact_sales_title' => 'Prodej',
'contact_documents_title' => 'Dokumenty',
'contact_leave_message_title' => 'Zanechte nám vzkaz',
'document_gdpr_policy' => 'Směrnice EU (GDPR)',
// Invoice module
'in.invoice' => 'Invoice',
'in_toaster.success_creation' => 'Invoice was created successfully',
'in_toaster.success_invoice_edition' => 'The invoice was successfully edited.',
'in_toaster.success_client_creation' => 'Client was created successfully',
'in_editor.page.create_regular_invoice' => 'Create Regular Invoice',
'in_editor.page.create_advance_invoice' => 'Create Advance Invoice',
'in_editor.page.edit_regular_invoice' => 'Edit Regular Invoice',
'in_editor.page.edit_advance_invoice' => 'Edit Advance Invoice',
'in_number' => 'Invoice Number',
'in_variable' => 'Variable Number',
'in_delivery_at' => 'Delivery At',
'in_number_desc' => 'Recommendation based on your latest invoice number {number}',
'in_variable_desc' => 'Recommendation based on your invoice number',
'in_editor.properties' => 'Invoice Properties',
'in_editor.client' => 'Client',
'in_editor.items' => 'Items',
'in_editor.discount' => 'Discount',
'in_editor.others' => 'Others',
'in_editor.summary' => 'Invoice Summary',
'in_editor.ico' => 'ICO',
'in_editor.dic' => 'DIC',
'in_editor.ic_dph' => 'IC DPH',
'in_editor.company_name' => 'Company name',
'in_editor.new_client' => 'Register new client...',
'in_editor.client_address' => 'Address',
'in_editor.client_city' => 'City',
'in_editor.client_postal_code' => 'Postal Code',
'in_editor.client_country' => 'Country',
'in_editor.client_phone' => 'Phone',
'in_editor.client_email' => 'Email',
'in_editor.client_logo' => 'Logo',
'in_editor.description' => 'Description',
'in_editor.amount' => 'Amount',
'in_editor.unit' => 'Unit',
'in_editor.tax_rate' => 'Tax Rate',
'in_editor.price' => 'Price',
'in_editor.add_item' => 'Add New Item',
'in_editor.apply_discount' => 'Apply discount',
'in_editor.discount_help' => 'You can apply percentage or value discount on your invoice.',
'in_editor.discount_type_percent' => 'Percentage',
'in_editor.discount_type_amount' => 'Amount',
'in_editor.discount_type' => 'Discount Type',
'in_editor.discount_rate' => 'Discount Rate',
'in_editor.store_client' => 'Store client for future use',
'in_editor.store_client_notes' => 'Client will be stored to your list and will be ready to reuse again when you create new invoice.',
'in_editor.send' => "Send invoice on client's email",
'in_editor.send_notes' => 'Invoice will be sent to client immediately after invoice generate.',
'in_editor.default_unit' => 'Pcs.',
'in_editor.plac.invoice_number' => 'Type invoice number...',
'in_editor.plac.variable_number' => 'Type variable number...',
'in_editor.plac.select_client' => 'Create new or select existing client...',
'in_editor.plac.client_ico' => 'Type client ICO...',
'in_editor.plac.client_dic' => 'Type client DIC...',
'in_editor.plac.client_ic_dph' => 'Type client IC DHP...',
'in_editor.plac.client_company' => 'Type client company name...',
'in_editor.plac.client_address' => 'Type client address...',
'in_editor.plac.client_city' => 'Type client city...',
'in_editor.plac.client_postal_code' => 'Type client postal code...',
'in_editor.plac.client_country' => 'Select client country',
'in_editor.plac.client_phone' => "Type client's phone number...",
'in_editor.plac.client_email' => "Type client's email address...",
'in_editor.plac.item_desc' => 'Type item description...',
'in_editor.plac.item_amount' => 'The amount in Pcs.',
'in_editor.plac.item_unit' => 'The unit',
'in_editor.plac.item_tax_rate' => 'Type item tax rate in %...',
'in_editor.plac.item_price' => 'Type the item price...',
'in_editor.plac.discount_type' => 'Select discount type',
'in_editor.plac.discount_rate' => 'Type discount rate...',
'in_editor.summary.vat_base' => 'VAT Base',
'in_editor.summary.vat' => 'VAT',
'in_editor.summary.total' => 'Total',
'in_editor.submit' => 'Store & Generate Invoice',
'in_editor.error' => 'There is probably an error, please check it and fix it.',
'inputs.placeholder_search_invoices' => 'Search in invoices...',
'inputs.placeholder_search_clients' => 'Search in clients...',
'in.nav.group.invoicing' => 'Invoicing',
'in.nav.group.settings' => 'Settings',
'in.nav.invoices' => 'Invoices',
'in.nav.advance_invoices' => 'Advance Invoices',
'in.nav.clients' => 'Clients',
'in.nav.my_bill_profile' => 'My Billing Profile',
'in.create.regular_invoice' => 'Create Invoice',
'in.create.advance_invoice' => 'Create Advance Invoice',
'in.create.client' => 'Create Client',
'in.button.setup_bill_profile' => 'Set up Billing Profile',
'in.button.store_bill_profile' => 'Store My Billing Profile',
'in.toaster.success_bill_profile' => 'Your billing profile was successfully stored',
'in.bill_profile_note' => 'Here you can set your <b class="text-theme">billing profile</b> which will be paste to your every newly generated invoice.',
'in.empty.bill_profile_title' => "You don't have billing profile",
'in.empty.bill_profile_description' => 'Before your first invoice, please set up your billing profile.',
'in.empty.clients_invoices' => "Client doesn't have any invoices yet.",
'in.empty.invoice_page_title' => 'Create Your First Invoice',
'in.empty.invoice_page_description' => "It's very easy, just click on the button below.",
'in.empty.client_page_title' => 'Create Your First Client',
'in.form.some_issues' => 'We found some issues in your form. Please check it out and submit again',
'in.form.create_client' => 'Create Client',
'in.form.delete_invoice' => 'Delete Invoice',
'in.form.stamp' => 'Stamp',
'in.form.author_name' => 'Author Name',
'in.form.swift_code' => 'BIC code/SWIFT',
'in.form.iban' => 'IBAN',
'in.form.bank_name' => 'Bank Name',
'in.form.reg_notes' => 'Registration Notes',
'in.form.company_name' => 'Company name',
'in.form.company_and_logo' => 'Company & Logo',
'in.form.company_details' => 'Company Details',
'in.form.company_address' => 'Company Address',
'in.form.contact_info' => 'Contact Information',
'in.form.bank_info' => 'Bank Info',
'in.form.author' => 'Author',
'in.menu.edit_invoice' => 'Edit Invoice',
'in.menu.send_invoice' => 'Send Invoice',
'in.menu.show_company' => 'Show Company',
'in.menu.edit' => 'Edit',
'in.menu.delete' => 'Delete',
'in.popup.delete_single_invoice.title' => 'Are you sure you want to delete this invoice?',
'in.popup.delete_single_invoice.message' => 'Your invoice will be permanently deleted.',
'in.popup.delete_invoice.title' => 'Are you sure you want to delete invoice number {number}?',
'in.popup.delete_invoice.message' => 'Your invoice will be permanently deleted.',
'in.popup.delete_client.title' => 'Are you sure you want to delete client {name}?',
'in.popup.delete_client.message' => 'Your client will be permanently deleted.',
'in.total_net' => 'Total Net',
'in.total_invoices' => 'Total Invoices',
'in.n-abbreviation' => 'n.',
'in.doc.taxable_doc' => 'Taxable Document',
'in.doc.advance_doc' => 'Advance Document',
'in.doc.number' => 'Number',
'in.doc.variable_symbol' => 'Variable symbol',
'in.doc.customer' => 'Customer',
'in.doc.supplier' => 'Supplier',
'in.doc.date_of_issue' => 'Date of issue',
'in.doc.date_of_delivery' => 'Date of delivery',
'in.doc.due_date' => 'Due date',
'in.doc.headquarters' => 'Headquarters',
'in.doc.sum_to_pay' => 'Total to pay',
'in.doc.bank_account_number' => 'Bank Number',
'in.doc.item.name' => 'Item',
'in.doc.item.amount' => 'Amount',
'in.doc.item.price_per_unit' => 'Unit Price',
'in.doc.item.total' => 'Total',
'in.doc.item.vat_rate' => 'Vat Rate',
'in.doc.item.vat' => 'Vat',
'in.doc.item.total_with_vat' => 'Total with Vat',
'in.doc.discount' => 'Discount',
'in.doc.vat_base' => 'VAT Base',
'in.doc.thanks' => 'Thank you for choosing our services.',
'in.doc.not_vat_payer' => "We aren't VAT payers.",
'in.doc.creator' => 'Issuer',
'in.doc.created_by_app' => 'Generated by <a href=":url">:app_name</a>',
'in.notify.subject' => 'You have new invoice from company :company',
'in.notify.message' => ':company send you invoice. You can find it in attachment of this email.',
'in.route_title.invoices' => 'Invoices',
'in.route_title.client' => 'Client',
'in.route_title.client_detail' => 'Client',
'in.route_title.client_invoices' => 'Client Invoices',
'in.share.share_invoice' => 'Share Your Invoice',
'in.share.type_email' => 'Type email address...',
'in.share.submit_share' => 'Send Invoice',
'in.share.invoice_sended' => 'Your invoice has been sent successfully',
'in.sort_by_net' => 'Sort By Total Net',
'in.sort_by_invoice_number' => 'Sort By Invoice Number',
'in.button_sorting' => 'Sorting',
'in.billing_info' => 'Billing Information',
'in.doc.revers_charge' => 'Revers Charge',
'in.doc.tax_transfer_liability' => 'Transfer of tax liability',
];

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