mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-04-06 18:53:48 +00:00
Compare commits
181 Commits
infinite_s
...
oasis
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
571fec7949 | ||
|
|
f9b5595ab6 | ||
|
|
b358a614e2 | ||
|
|
7d9d2a9da9 | ||
|
|
c132601f06 | ||
|
|
0e4595c30f | ||
|
|
c323304f2e | ||
|
|
d9ee68db7c | ||
|
|
756e0c4ca3 | ||
|
|
c52c576f7c | ||
|
|
1a63f3aa07 | ||
|
|
f29a93f77b | ||
|
|
f294c8f4a1 | ||
|
|
959beae9e9 | ||
|
|
524b5a94df | ||
|
|
05dc227650 | ||
|
|
350f130d98 | ||
|
|
99b4b030d2 | ||
|
|
8a2af11f6a | ||
|
|
26636dffab | ||
|
|
3dae2a72c9 | ||
|
|
38fadeec5e | ||
|
|
31954767b7 | ||
|
|
c760116cbf | ||
|
|
49131ddf97 | ||
|
|
fb7338c2bb | ||
|
|
d2391afb14 | ||
|
|
8e66900d8d | ||
|
|
1a77ccdb9d | ||
|
|
50a96d9051 | ||
|
|
7baf8f0ec9 | ||
|
|
8389f7a4d6 | ||
|
|
b74f93a271 | ||
|
|
ed9c80eb74 | ||
|
|
147f82e9a8 | ||
|
|
15a6ad6166 | ||
|
|
3fbf0ca093 | ||
|
|
2586e65cf9 | ||
|
|
b8731a108b | ||
|
|
2f238c90d9 | ||
|
|
6f9ae7ebfe | ||
|
|
983425b89a | ||
|
|
ca9ed1029e | ||
|
|
78aa1a0779 | ||
|
|
4ec2d1077f | ||
|
|
e371b37016 | ||
|
|
05583f74af | ||
|
|
6cbffd08b2 | ||
|
|
66fe92653c | ||
|
|
b16b8b87cc | ||
|
|
04a1f88abb | ||
|
|
0eee956011 | ||
|
|
722eceb0c1 | ||
|
|
b4e6561134 | ||
|
|
3af8bff13b | ||
|
|
f5958dda57 | ||
|
|
e8ca132a8b | ||
|
|
a7a6ef9f0a | ||
|
|
a6db642db7 | ||
|
|
1ea8f2ce60 | ||
|
|
5ea898d716 | ||
|
|
9857a30d2c | ||
|
|
ca255a7416 | ||
|
|
73672bc023 | ||
|
|
070f8b4d40 | ||
|
|
f5f0663d07 | ||
|
|
69deafeda0 | ||
|
|
070a3aaba4 | ||
|
|
599b238ab4 | ||
|
|
bdfd92872e | ||
|
|
62820c8ddb | ||
|
|
c65414f0c4 | ||
|
|
7cc27938bf | ||
|
|
0332f8b1fb | ||
|
|
fbde515a40 | ||
|
|
cc4f9c0b89 | ||
|
|
8a784f4520 | ||
|
|
9793a55efd | ||
|
|
eb2a7323e9 | ||
|
|
d162018fcf | ||
|
|
23611defc1 | ||
|
|
434c45299c | ||
|
|
878bdb3ce7 | ||
|
|
fe0ed38157 | ||
|
|
8f9bdc5918 | ||
|
|
ed6c968dae | ||
|
|
c923a40363 | ||
|
|
3c3e82758d | ||
|
|
5167ae520e | ||
|
|
aea4213ec2 | ||
|
|
31dd782bae | ||
|
|
120973ae00 | ||
|
|
1486ce63fa | ||
|
|
834b0ba5e0 | ||
|
|
19bce195b4 | ||
|
|
13ec1257e1 | ||
|
|
248825f2d1 | ||
|
|
b37edd298a | ||
|
|
1e4bbd10f3 | ||
|
|
bcf14595bf | ||
|
|
e7c4048258 | ||
|
|
f7135c9b27 | ||
|
|
5be490c8d5 | ||
|
|
7cf193abb7 | ||
|
|
644fbaede4 | ||
|
|
e65e3e88d7 | ||
|
|
9a5f9fe49d | ||
|
|
16c47465e6 | ||
|
|
da55b3dd78 | ||
|
|
894cef5d66 | ||
|
|
90f91c47ce | ||
|
|
3774a05edd | ||
|
|
73861f814c | ||
|
|
5b70066900 | ||
|
|
4b0e4da013 | ||
|
|
eae212ac5d | ||
|
|
5a9583be5b | ||
|
|
aa585b60d5 | ||
|
|
8707a61144 | ||
|
|
597a600109 | ||
|
|
4dfc5bcc35 | ||
|
|
33d45408d2 | ||
|
|
90051cec91 | ||
|
|
dd0d10afda | ||
|
|
af571317ff | ||
|
|
80019b822d | ||
|
|
edafa1791b | ||
|
|
498f81b846 | ||
|
|
56bbdc846c | ||
|
|
a2c606e1c7 | ||
|
|
3e61482a2c | ||
|
|
bec2dd0e03 | ||
|
|
0bf81164e7 | ||
|
|
e78f1ce731 | ||
|
|
b00c8cdbed | ||
|
|
44a656e5d5 | ||
|
|
11c6690e50 | ||
|
|
fac75c7e71 | ||
|
|
57bab1a225 | ||
|
|
17ccf7b354 | ||
|
|
71147adb01 | ||
|
|
7cefcf8dab | ||
|
|
737adfa91a | ||
|
|
20f8fe4b51 | ||
|
|
e0daa46b50 | ||
|
|
2ca4d4a02d | ||
|
|
399748b01a | ||
|
|
2f4df83b31 | ||
|
|
9ea78d103e | ||
|
|
790da00420 | ||
|
|
760d7a4687 | ||
|
|
37ab6408ba | ||
|
|
b3737c11ba | ||
|
|
4f667f7a94 | ||
|
|
377c471a6c | ||
|
|
7cf09494e5 | ||
|
|
5d0348e2d0 | ||
|
|
6d5a43da72 | ||
|
|
d2a82aaa80 | ||
|
|
a3d4dfec3b | ||
|
|
ee1a8a6719 | ||
|
|
44fe96497c | ||
|
|
88c134918e | ||
|
|
af79a28361 | ||
|
|
1bb3ca4fb5 | ||
|
|
1ffa569ea3 | ||
|
|
480f518ebc | ||
|
|
888d76fea0 | ||
|
|
47ce8c3eef | ||
|
|
75042e0c42 | ||
|
|
9566a4a830 | ||
|
|
7521c588fc | ||
|
|
97f13c0b62 | ||
|
|
4b97c674ba | ||
|
|
0d4b8403ba | ||
|
|
021e78e0c5 | ||
|
|
778a94e5ba | ||
|
|
0db55b51d2 | ||
|
|
45de6b557a | ||
|
|
3c01ce5ad3 | ||
|
|
80b24cd753 |
85
.env.example
85
.env.example
@@ -1,6 +1,6 @@
|
||||
APP_NAME=VueFileManager
|
||||
APP_ENV=local
|
||||
APP_KEY=base64:sC1YuKsbWv7MdWugb9ZsYBqv2QZJ+QOuHZHEddOsAao=
|
||||
APP_ENV=production
|
||||
APP_KEY=base64:sB1YuKsbWv7MdWugb9ZsYBqv2QZJ+QOuHZHEddOsUuo=
|
||||
APP_DEBUG=true
|
||||
APP_URL=http://localhost
|
||||
APP_DEMO=false
|
||||
@@ -10,7 +10,7 @@ LOG_CHANNEL=daily
|
||||
SCOUT_DRIVER=tntsearch
|
||||
SCOUT_QUEUE=true
|
||||
|
||||
FILESYSTEM_DISK=local
|
||||
FILESYSTEM_DRIVER=
|
||||
CHUNK_SIZE=128
|
||||
|
||||
DB_CONNECTION=mysql
|
||||
@@ -22,7 +22,7 @@ DB_PASSWORD=
|
||||
|
||||
DB_MYSQLDUMP_PATH=
|
||||
|
||||
BROADCAST_DRIVER=null
|
||||
BROADCAST_DRIVER=log
|
||||
CACHE_DRIVER=file
|
||||
QUEUE_CONNECTION=database
|
||||
SESSION_DRIVER=file
|
||||
@@ -41,56 +41,43 @@ MAIL_ENCRYPTION=
|
||||
MAIL_FROM_ADDRESS="${MAIL_USERNAME}"
|
||||
MAIL_FROM_NAME="${MAIL_USERNAME}"
|
||||
|
||||
POSTMARK_TOKEN=
|
||||
|
||||
MAILGUN_DOMAIN=
|
||||
MAILGUN_SECRET=
|
||||
MAILGUN_ENDPOINT=
|
||||
OSS_ACCESS_KEY_ID=
|
||||
OSS_SECRET_ACCESS_KEY=
|
||||
OSS_REGION=
|
||||
OSS_BUCKET=
|
||||
OSS_ENDPOINT=
|
||||
OSS_URL=
|
||||
|
||||
AWS_ACCESS_KEY_ID=
|
||||
AWS_SECRET_ACCESS_KEY=
|
||||
AWS_DEFAULT_REGION=
|
||||
AWS_SESSION_TOKEN=
|
||||
AWS_BUCKET=
|
||||
|
||||
S3_ACCESS_KEY_ID=
|
||||
S3_SECRET_ACCESS_KEY=
|
||||
S3_DEFAULT_REGION=
|
||||
S3_BUCKET=
|
||||
S3_URL=
|
||||
DO_SPACES_KEY=
|
||||
DO_SPACES_SECRET=
|
||||
DO_SPACES_ENDPOINT=
|
||||
DO_SPACES_REGION=
|
||||
DO_SPACES_BUCKET=
|
||||
|
||||
STRIPE_SECRET_KEY=
|
||||
STRIPE_PUBLIC_KEY=
|
||||
WASABI_KEY=
|
||||
WASABI_SECRET=
|
||||
WASABI_ENDPOINT=
|
||||
WASABI_REGION=
|
||||
WASABI_BUCKET=
|
||||
|
||||
BACKBLAZE_KEY=
|
||||
BACKBLAZE_SECRET=
|
||||
BACKBLAZE_ENDPOINT=
|
||||
BACKBLAZE_REGION=
|
||||
BACKBLAZE_BUCKET=
|
||||
|
||||
APP_DEPLOY_SECRET=
|
||||
|
||||
CASHIER_LOGGER=stack
|
||||
CASHIER_CURRENCY=
|
||||
STRIPE_KEY=
|
||||
STRIPE_SECRET=
|
||||
STRIPE_WEBHOOK_SECRET=
|
||||
CASHIER_PAYMENT_NOTIFICATION=App\Notifications\ConfirmPayment
|
||||
|
||||
PAYSTACK_SECRET=
|
||||
PAYSTACK_PUBLIC_KEY=
|
||||
|
||||
PAYPAL_CLIENT_ID=
|
||||
PAYPAL_CLIENT_SECRET=
|
||||
PAYPAL_WEBHOOK_ID=
|
||||
PAYPAL_IS_LIVE=true
|
||||
|
||||
FACEBOOK_CLIENT_ID=
|
||||
FACEBOOK_CLIENT_SECRET=
|
||||
|
||||
GOOGLE_CLIENT_ID=
|
||||
GOOGLE_CLIENT_SECRET=
|
||||
|
||||
GITHUB_CLIENT_ID=
|
||||
GITHUB_CLIENT_SECRET=
|
||||
|
||||
RECAPTCHA_CLIENT_ID=
|
||||
RECAPTCHA_CLIENT_SECRET=
|
||||
|
||||
SANCTUM_STATEFUL_DOMAINS=localhost,localhost:8000,127.0.0.1,127.0.0.1:8000,::1
|
||||
|
||||
PUSHER_APP_ID=local
|
||||
PUSHER_APP_KEY=local
|
||||
PUSHER_APP_SECRET=local
|
||||
PUSHER_APP_CLUSTER=mt1
|
||||
PUSHER_APP_HOST=
|
||||
PUSHER_APP_PORT=
|
||||
|
||||
IS_ADMIN_VUEFILEMANAGER_BAR=true
|
||||
IS_SETUP_WIZARD_DEMO=false
|
||||
IS_SETUP_WIZARD_DEBUG=false
|
||||
SANCTUM_STATEFUL_DOMAINS=localhost,localhost:8000,127.0.0.1,127.0.0.1:8000,::1
|
||||
22
.env.testing
22
.env.testing
@@ -1,11 +1,11 @@
|
||||
APP_NAME=Laravel
|
||||
APP_ENV=local
|
||||
APP_KEY=base64:YE2Zo20UvRL3LkRLr54PjlayHUCoDEGVICIq76iFZlU=
|
||||
APP_KEY=base64:47yorkyoH3qCrKKO4eG6LpZUogoTC51qey5vYq/O3AM=
|
||||
APP_DEBUG=true
|
||||
APP_URL=http://localhost
|
||||
APP_DEMO=false
|
||||
|
||||
LOG_CHANNEL=stack
|
||||
LOG_CHANNEL=daily
|
||||
|
||||
DB_CONNECTION=sqlite
|
||||
DB_HOST=null
|
||||
@@ -14,8 +14,8 @@ DB_DATABASE=database/test.sqlite
|
||||
DB_USERNAME=null
|
||||
DB_PASSWORD=null
|
||||
|
||||
FILESYSTEM_DISK=local
|
||||
BROADCAST_DRIVER=null
|
||||
FILESYSTEM_DRIVER=local
|
||||
BROADCAST_DRIVER=log
|
||||
CACHE_DRIVER=file
|
||||
SESSION_DRIVER=file
|
||||
SESSION_LIFETIME=120
|
||||
@@ -34,10 +34,10 @@ MAIL_ENCRYPTION=null
|
||||
MAIL_FROM_ADDRESS=null
|
||||
MAIL_FROM_NAME="${APP_NAME}"
|
||||
|
||||
S3_ACCESS_KEY_ID=
|
||||
S3_SECRET_ACCESS_KEY=
|
||||
S3_DEFAULT_REGION=us-east-1
|
||||
S3_BUCKET=
|
||||
AWS_ACCESS_KEY_ID=
|
||||
AWS_SECRET_ACCESS_KEY=
|
||||
AWS_DEFAULT_REGION=us-east-1
|
||||
AWS_BUCKET=
|
||||
|
||||
PUSHER_APP_ID=
|
||||
PUSHER_APP_KEY=
|
||||
@@ -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
|
||||
|
||||
5
.github/workflows/backend-code-style-fix.yml
vendored
5
.github/workflows/backend-code-style-fix.yml
vendored
@@ -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:
|
||||
|
||||
6
.github/workflows/build.yml
vendored
6
.github/workflows/build.yml
vendored
@@ -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
|
||||
8
.github/workflows/unit-testing.yml
vendored
8
.github/workflows/unit-testing.yml
vendored
@@ -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
|
||||
|
||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -10,7 +10,6 @@
|
||||
.env
|
||||
.env.backup
|
||||
.env.testing
|
||||
.php-cs-fixer.cache
|
||||
.phpunit.result.cache
|
||||
.phpstorm.meta.php
|
||||
.vscode/
|
||||
@@ -20,4 +19,3 @@ Homestead.yaml
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
prettier.json
|
||||
/public/temp
|
||||
|
||||
1
.php-cs-fixer.cache
Normal file
1
.php-cs-fixer.cache
Normal file
File diff suppressed because one or more lines are too long
@@ -2,10 +2,9 @@
|
||||
|
||||
$finder = PhpCsFixer\Finder::create()
|
||||
->in([
|
||||
__DIR__ . '/src',
|
||||
__DIR__ . '/app',
|
||||
__DIR__ . '/routes',
|
||||
__DIR__ . '/config',
|
||||
__DIR__ . '/tests',
|
||||
])
|
||||
->name('*.php')
|
||||
->notName('*.blade.php')
|
||||
@@ -13,68 +12,62 @@ $finder = PhpCsFixer\Finder::create()
|
||||
->ignoreVCS(true);
|
||||
|
||||
$config = new PhpCsFixer\Config();
|
||||
|
||||
return $config->setRules([
|
||||
'@PSR2' => true,
|
||||
'nullable_type_declaration_for_default_null_value' => [
|
||||
'use_nullable_type_declaration' => true
|
||||
],
|
||||
'array_syntax' => [
|
||||
'@PSR2' => true,
|
||||
'array_syntax' => [
|
||||
'syntax' => 'short'
|
||||
],
|
||||
'ordered_imports' => [
|
||||
'ordered_imports' => [
|
||||
'sort_algorithm' => 'length'
|
||||
],
|
||||
'blank_line_before_statement' => [
|
||||
'blank_line_before_statement' => [
|
||||
'statements' => ['break', 'case', 'continue', 'declare', 'default', 'do', 'exit', 'for', 'foreach', 'goto', 'if', 'include', 'include_once', 'require', 'require_once', 'return', 'switch', 'throw', 'try', 'while', 'yield', 'yield_from'],
|
||||
],
|
||||
'method_argument_space' => [
|
||||
'method_argument_space' => [
|
||||
'on_multiline' => 'ensure_fully_multiline',
|
||||
'keep_multiple_spaces_after_comma' => true,
|
||||
],
|
||||
'no_extra_blank_lines' => [
|
||||
'no_extra_blank_lines' => [
|
||||
'tokens' => ['break', 'case', 'continue', 'curly_brace_block', 'default', 'extra', 'parenthesis_brace_block', 'return', 'square_brace_block', 'switch', 'throw', 'use', 'use_trait'],
|
||||
],
|
||||
'cast_spaces' => [
|
||||
'cast_spaces' => [
|
||||
'space' => 'single'
|
||||
],
|
||||
'use_arrow_functions' => true,
|
||||
'phpdoc_single_line_var_spacing' => true,
|
||||
'phpdoc_var_without_name' => true,
|
||||
'single_space_after_construct' => true,
|
||||
'single_line_after_imports' => true,
|
||||
'no_unused_imports' => true,
|
||||
'not_operator_with_successor_space' => true,
|
||||
'trailing_comma_in_multiline' => ['elements' => ['arrays']],
|
||||
'phpdoc_scalar' => true,
|
||||
'unary_operator_spaces' => true,
|
||||
'binary_operator_spaces' => ['operators' => ['=>' => 'align']],
|
||||
'single_trait_insert_per_statement' => false,
|
||||
'method_chaining_indentation' => true,
|
||||
'array_indentation' => true,
|
||||
'single_quote' => true,
|
||||
'no_singleline_whitespace_before_semicolons' => true,
|
||||
'no_empty_statement' => true,
|
||||
'standardize_increment' => true,
|
||||
'object_operator_without_whitespace' => true,
|
||||
'ternary_operator_spaces' => true,
|
||||
'no_leading_namespace_whitespace' => true,
|
||||
'no_blank_lines_before_namespace' => true,
|
||||
'blank_line_after_namespace' => true,
|
||||
'fully_qualified_strict_types' => true,
|
||||
'single_line_throw' => true,
|
||||
'function_typehint_space' => true,
|
||||
'simplified_if_return' => true,
|
||||
'no_useless_else' => true,
|
||||
'no_unneeded_curly_braces' => true,
|
||||
'no_empty_comment' => true,
|
||||
'no_blank_lines_after_class_opening' => true,
|
||||
'whitespace_after_comma_in_array' => true,
|
||||
'trim_array_spaces' => true,
|
||||
'no_whitespace_before_comma_in_array' => true,
|
||||
'constant_case' => true,
|
||||
'lowercase_keywords' => true,
|
||||
'lowercase_static_reference' => true,
|
||||
'lambda_not_used_import' => true,
|
||||
'phpdoc_single_line_var_spacing' => true,
|
||||
'phpdoc_var_without_name' => true,
|
||||
'single_space_after_construct' => true,
|
||||
'single_line_after_imports' => true,
|
||||
'no_unused_imports' => true,
|
||||
'not_operator_with_successor_space' => true,
|
||||
'trailing_comma_in_multiline' => ['elements' => ['arrays']],
|
||||
'phpdoc_scalar' => true,
|
||||
'unary_operator_spaces' => true,
|
||||
'binary_operator_spaces' => ['operators' => ['=>' => 'align']],
|
||||
'single_trait_insert_per_statement' => false,
|
||||
'method_chaining_indentation' => true,
|
||||
'array_indentation' => true,
|
||||
'single_quote' => true,
|
||||
'no_singleline_whitespace_before_semicolons' => true,
|
||||
'no_empty_statement' => true,
|
||||
'standardize_increment' => true,
|
||||
'object_operator_without_whitespace' => true,
|
||||
'ternary_operator_spaces' => true,
|
||||
'no_leading_namespace_whitespace' => true,
|
||||
'no_blank_lines_before_namespace' => true,
|
||||
'blank_line_after_namespace' => true,
|
||||
'fully_qualified_strict_types' => true,
|
||||
'single_line_throw' => true,
|
||||
'function_typehint_space' => true,
|
||||
'simplified_if_return' => true,
|
||||
'no_useless_else' => true,
|
||||
'no_unneeded_curly_braces' => true,
|
||||
'no_empty_comment' => true,
|
||||
'no_blank_lines_after_class_opening' => true,
|
||||
'whitespace_after_comma_in_array' => true,
|
||||
'trim_array_spaces' => true,
|
||||
'no_whitespace_before_comma_in_array' => true,
|
||||
'constant_case' => true,
|
||||
'lowercase_keywords' => true,
|
||||
'lowercase_static_reference' => true,
|
||||
])
|
||||
->setFinder($finder);
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -51,24 +51,23 @@ namespace PHPSTORM_META {
|
||||
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
|
||||
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
|
||||
'LaravelCrawlerDetect' => \Jaybizzle\CrawlerDetect\CrawlerDetect::class,
|
||||
'Laravel\Fortify\Contracts\CreatesNewUsers' => \App\Actions\Fortify\CreateNewUser::class,
|
||||
'Laravel\Fortify\Contracts\FailedPasswordConfirmationResponse' => \Laravel\Fortify\Http\Responses\FailedPasswordConfirmationResponse::class,
|
||||
'Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\FailedTwoFactorLoginResponse::class,
|
||||
'Laravel\Fortify\Contracts\LockoutResponse' => \Laravel\Fortify\Http\Responses\LockoutResponse::class,
|
||||
'Laravel\Fortify\Contracts\LoginResponse' => \Laravel\Fortify\Http\Responses\LoginResponse::class,
|
||||
'Laravel\Fortify\Contracts\LogoutResponse' => \Laravel\Fortify\Http\Responses\LogoutResponse::class,
|
||||
'Laravel\Fortify\Contracts\PasswordConfirmedResponse' => \Laravel\Fortify\Http\Responses\PasswordConfirmedResponse::class,
|
||||
'Laravel\Fortify\Contracts\PasswordUpdateResponse' => \Laravel\Fortify\Http\Responses\PasswordUpdateResponse::class,
|
||||
'Laravel\Fortify\Contracts\RegisterResponse' => \Laravel\Fortify\Http\Responses\RegisterResponse::class,
|
||||
'Laravel\Fortify\Contracts\ResetsUserPasswords' => \App\Users\Actions\ResetUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\ResetsUserPasswords' => \App\Actions\Fortify\ResetUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\TwoFactorAuthenticationProvider' => \Laravel\Fortify\TwoFactorAuthenticationProvider::class,
|
||||
'Laravel\Fortify\Contracts\TwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\TwoFactorLoginResponse::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserPasswords' => \App\Users\Actions\UpdateUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserProfileInformation' => \App\Users\Actions\UpdateUserProfileInformation::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserPasswords' => \App\Actions\Fortify\UpdateUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserProfileInformation' => \App\Actions\Fortify\UpdateUserProfileInformation::class,
|
||||
'Laravel\Scout\EngineManager' => \Laravel\Scout\EngineManager::class,
|
||||
'NunoMaduro\Collision\Contracts\Provider' => \NunoMaduro\Collision\Provider::class,
|
||||
'Spatie\Backup\Helpers\ConsoleOutput' => \Spatie\Backup\Helpers\ConsoleOutput::class,
|
||||
'Spatie\Backup\Tasks\Cleanup\CleanupStrategy' => \Spatie\Backup\Tasks\Cleanup\Strategies\DefaultStrategy::class,
|
||||
'Spatie\QueryBuilder\QueryBuilderRequest' => \Spatie\QueryBuilder\QueryBuilderRequest::class,
|
||||
'Stripe\Util\LoggerInterface' => \Laravel\Cashier\Logger::class,
|
||||
'Whoops\Handler\HandlerInterface' => \Facade\Ignition\ErrorPage\IgnitionWhoopsHandler::class,
|
||||
'auth' => \Illuminate\Auth\AuthManager::class,
|
||||
@@ -94,7 +93,6 @@ namespace PHPSTORM_META {
|
||||
'command.config.clear' => \Illuminate\Foundation\Console\ConfigClearCommand::class,
|
||||
'command.console.make' => \Illuminate\Foundation\Console\ConsoleMakeCommand::class,
|
||||
'command.controller.make' => \Illuminate\Routing\Console\ControllerMakeCommand::class,
|
||||
'command.db.prune' => \Illuminate\Database\Console\PruneCommand::class,
|
||||
'command.db.wipe' => \Illuminate\Database\Console\WipeCommand::class,
|
||||
'command.down' => \Illuminate\Foundation\Console\DownCommand::class,
|
||||
'command.environment' => \Illuminate\Foundation\Console\EnvironmentCommand::class,
|
||||
@@ -142,7 +140,6 @@ namespace PHPSTORM_META {
|
||||
'command.queue.forget' => \Illuminate\Queue\Console\ForgetFailedCommand::class,
|
||||
'command.queue.listen' => \Illuminate\Queue\Console\ListenCommand::class,
|
||||
'command.queue.prune-batches' => \Illuminate\Queue\Console\PruneBatchesCommand::class,
|
||||
'command.queue.prune-failed-jobs' => \Illuminate\Queue\Console\PruneFailedJobsCommand::class,
|
||||
'command.queue.restart' => \Illuminate\Queue\Console\RestartCommand::class,
|
||||
'command.queue.retry' => \Illuminate\Queue\Console\RetryCommand::class,
|
||||
'command.queue.retry-batch' => \Illuminate\Queue\Console\RetryBatchCommand::class,
|
||||
@@ -253,24 +250,23 @@ namespace PHPSTORM_META {
|
||||
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
|
||||
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
|
||||
'LaravelCrawlerDetect' => \Jaybizzle\CrawlerDetect\CrawlerDetect::class,
|
||||
'Laravel\Fortify\Contracts\CreatesNewUsers' => \App\Actions\Fortify\CreateNewUser::class,
|
||||
'Laravel\Fortify\Contracts\FailedPasswordConfirmationResponse' => \Laravel\Fortify\Http\Responses\FailedPasswordConfirmationResponse::class,
|
||||
'Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\FailedTwoFactorLoginResponse::class,
|
||||
'Laravel\Fortify\Contracts\LockoutResponse' => \Laravel\Fortify\Http\Responses\LockoutResponse::class,
|
||||
'Laravel\Fortify\Contracts\LoginResponse' => \Laravel\Fortify\Http\Responses\LoginResponse::class,
|
||||
'Laravel\Fortify\Contracts\LogoutResponse' => \Laravel\Fortify\Http\Responses\LogoutResponse::class,
|
||||
'Laravel\Fortify\Contracts\PasswordConfirmedResponse' => \Laravel\Fortify\Http\Responses\PasswordConfirmedResponse::class,
|
||||
'Laravel\Fortify\Contracts\PasswordUpdateResponse' => \Laravel\Fortify\Http\Responses\PasswordUpdateResponse::class,
|
||||
'Laravel\Fortify\Contracts\RegisterResponse' => \Laravel\Fortify\Http\Responses\RegisterResponse::class,
|
||||
'Laravel\Fortify\Contracts\ResetsUserPasswords' => \App\Users\Actions\ResetUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\ResetsUserPasswords' => \App\Actions\Fortify\ResetUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\TwoFactorAuthenticationProvider' => \Laravel\Fortify\TwoFactorAuthenticationProvider::class,
|
||||
'Laravel\Fortify\Contracts\TwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\TwoFactorLoginResponse::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserPasswords' => \App\Users\Actions\UpdateUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserProfileInformation' => \App\Users\Actions\UpdateUserProfileInformation::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserPasswords' => \App\Actions\Fortify\UpdateUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserProfileInformation' => \App\Actions\Fortify\UpdateUserProfileInformation::class,
|
||||
'Laravel\Scout\EngineManager' => \Laravel\Scout\EngineManager::class,
|
||||
'NunoMaduro\Collision\Contracts\Provider' => \NunoMaduro\Collision\Provider::class,
|
||||
'Spatie\Backup\Helpers\ConsoleOutput' => \Spatie\Backup\Helpers\ConsoleOutput::class,
|
||||
'Spatie\Backup\Tasks\Cleanup\CleanupStrategy' => \Spatie\Backup\Tasks\Cleanup\Strategies\DefaultStrategy::class,
|
||||
'Spatie\QueryBuilder\QueryBuilderRequest' => \Spatie\QueryBuilder\QueryBuilderRequest::class,
|
||||
'Stripe\Util\LoggerInterface' => \Laravel\Cashier\Logger::class,
|
||||
'Whoops\Handler\HandlerInterface' => \Facade\Ignition\ErrorPage\IgnitionWhoopsHandler::class,
|
||||
'auth' => \Illuminate\Auth\AuthManager::class,
|
||||
@@ -296,7 +292,6 @@ namespace PHPSTORM_META {
|
||||
'command.config.clear' => \Illuminate\Foundation\Console\ConfigClearCommand::class,
|
||||
'command.console.make' => \Illuminate\Foundation\Console\ConsoleMakeCommand::class,
|
||||
'command.controller.make' => \Illuminate\Routing\Console\ControllerMakeCommand::class,
|
||||
'command.db.prune' => \Illuminate\Database\Console\PruneCommand::class,
|
||||
'command.db.wipe' => \Illuminate\Database\Console\WipeCommand::class,
|
||||
'command.down' => \Illuminate\Foundation\Console\DownCommand::class,
|
||||
'command.environment' => \Illuminate\Foundation\Console\EnvironmentCommand::class,
|
||||
@@ -344,7 +339,6 @@ namespace PHPSTORM_META {
|
||||
'command.queue.forget' => \Illuminate\Queue\Console\ForgetFailedCommand::class,
|
||||
'command.queue.listen' => \Illuminate\Queue\Console\ListenCommand::class,
|
||||
'command.queue.prune-batches' => \Illuminate\Queue\Console\PruneBatchesCommand::class,
|
||||
'command.queue.prune-failed-jobs' => \Illuminate\Queue\Console\PruneFailedJobsCommand::class,
|
||||
'command.queue.restart' => \Illuminate\Queue\Console\RestartCommand::class,
|
||||
'command.queue.retry' => \Illuminate\Queue\Console\RetryCommand::class,
|
||||
'command.queue.retry-batch' => \Illuminate\Queue\Console\RetryBatchCommand::class,
|
||||
@@ -455,24 +449,23 @@ namespace PHPSTORM_META {
|
||||
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
|
||||
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
|
||||
'LaravelCrawlerDetect' => \Jaybizzle\CrawlerDetect\CrawlerDetect::class,
|
||||
'Laravel\Fortify\Contracts\CreatesNewUsers' => \App\Actions\Fortify\CreateNewUser::class,
|
||||
'Laravel\Fortify\Contracts\FailedPasswordConfirmationResponse' => \Laravel\Fortify\Http\Responses\FailedPasswordConfirmationResponse::class,
|
||||
'Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\FailedTwoFactorLoginResponse::class,
|
||||
'Laravel\Fortify\Contracts\LockoutResponse' => \Laravel\Fortify\Http\Responses\LockoutResponse::class,
|
||||
'Laravel\Fortify\Contracts\LoginResponse' => \Laravel\Fortify\Http\Responses\LoginResponse::class,
|
||||
'Laravel\Fortify\Contracts\LogoutResponse' => \Laravel\Fortify\Http\Responses\LogoutResponse::class,
|
||||
'Laravel\Fortify\Contracts\PasswordConfirmedResponse' => \Laravel\Fortify\Http\Responses\PasswordConfirmedResponse::class,
|
||||
'Laravel\Fortify\Contracts\PasswordUpdateResponse' => \Laravel\Fortify\Http\Responses\PasswordUpdateResponse::class,
|
||||
'Laravel\Fortify\Contracts\RegisterResponse' => \Laravel\Fortify\Http\Responses\RegisterResponse::class,
|
||||
'Laravel\Fortify\Contracts\ResetsUserPasswords' => \App\Users\Actions\ResetUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\ResetsUserPasswords' => \App\Actions\Fortify\ResetUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\TwoFactorAuthenticationProvider' => \Laravel\Fortify\TwoFactorAuthenticationProvider::class,
|
||||
'Laravel\Fortify\Contracts\TwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\TwoFactorLoginResponse::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserPasswords' => \App\Users\Actions\UpdateUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserProfileInformation' => \App\Users\Actions\UpdateUserProfileInformation::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserPasswords' => \App\Actions\Fortify\UpdateUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserProfileInformation' => \App\Actions\Fortify\UpdateUserProfileInformation::class,
|
||||
'Laravel\Scout\EngineManager' => \Laravel\Scout\EngineManager::class,
|
||||
'NunoMaduro\Collision\Contracts\Provider' => \NunoMaduro\Collision\Provider::class,
|
||||
'Spatie\Backup\Helpers\ConsoleOutput' => \Spatie\Backup\Helpers\ConsoleOutput::class,
|
||||
'Spatie\Backup\Tasks\Cleanup\CleanupStrategy' => \Spatie\Backup\Tasks\Cleanup\Strategies\DefaultStrategy::class,
|
||||
'Spatie\QueryBuilder\QueryBuilderRequest' => \Spatie\QueryBuilder\QueryBuilderRequest::class,
|
||||
'Stripe\Util\LoggerInterface' => \Laravel\Cashier\Logger::class,
|
||||
'Whoops\Handler\HandlerInterface' => \Facade\Ignition\ErrorPage\IgnitionWhoopsHandler::class,
|
||||
'auth' => \Illuminate\Auth\AuthManager::class,
|
||||
@@ -498,7 +491,6 @@ namespace PHPSTORM_META {
|
||||
'command.config.clear' => \Illuminate\Foundation\Console\ConfigClearCommand::class,
|
||||
'command.console.make' => \Illuminate\Foundation\Console\ConsoleMakeCommand::class,
|
||||
'command.controller.make' => \Illuminate\Routing\Console\ControllerMakeCommand::class,
|
||||
'command.db.prune' => \Illuminate\Database\Console\PruneCommand::class,
|
||||
'command.db.wipe' => \Illuminate\Database\Console\WipeCommand::class,
|
||||
'command.down' => \Illuminate\Foundation\Console\DownCommand::class,
|
||||
'command.environment' => \Illuminate\Foundation\Console\EnvironmentCommand::class,
|
||||
@@ -546,7 +538,6 @@ namespace PHPSTORM_META {
|
||||
'command.queue.forget' => \Illuminate\Queue\Console\ForgetFailedCommand::class,
|
||||
'command.queue.listen' => \Illuminate\Queue\Console\ListenCommand::class,
|
||||
'command.queue.prune-batches' => \Illuminate\Queue\Console\PruneBatchesCommand::class,
|
||||
'command.queue.prune-failed-jobs' => \Illuminate\Queue\Console\PruneFailedJobsCommand::class,
|
||||
'command.queue.restart' => \Illuminate\Queue\Console\RestartCommand::class,
|
||||
'command.queue.retry' => \Illuminate\Queue\Console\RetryCommand::class,
|
||||
'command.queue.retry-batch' => \Illuminate\Queue\Console\RetryBatchCommand::class,
|
||||
@@ -657,24 +648,23 @@ namespace PHPSTORM_META {
|
||||
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
|
||||
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
|
||||
'LaravelCrawlerDetect' => \Jaybizzle\CrawlerDetect\CrawlerDetect::class,
|
||||
'Laravel\Fortify\Contracts\CreatesNewUsers' => \App\Actions\Fortify\CreateNewUser::class,
|
||||
'Laravel\Fortify\Contracts\FailedPasswordConfirmationResponse' => \Laravel\Fortify\Http\Responses\FailedPasswordConfirmationResponse::class,
|
||||
'Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\FailedTwoFactorLoginResponse::class,
|
||||
'Laravel\Fortify\Contracts\LockoutResponse' => \Laravel\Fortify\Http\Responses\LockoutResponse::class,
|
||||
'Laravel\Fortify\Contracts\LoginResponse' => \Laravel\Fortify\Http\Responses\LoginResponse::class,
|
||||
'Laravel\Fortify\Contracts\LogoutResponse' => \Laravel\Fortify\Http\Responses\LogoutResponse::class,
|
||||
'Laravel\Fortify\Contracts\PasswordConfirmedResponse' => \Laravel\Fortify\Http\Responses\PasswordConfirmedResponse::class,
|
||||
'Laravel\Fortify\Contracts\PasswordUpdateResponse' => \Laravel\Fortify\Http\Responses\PasswordUpdateResponse::class,
|
||||
'Laravel\Fortify\Contracts\RegisterResponse' => \Laravel\Fortify\Http\Responses\RegisterResponse::class,
|
||||
'Laravel\Fortify\Contracts\ResetsUserPasswords' => \App\Users\Actions\ResetUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\ResetsUserPasswords' => \App\Actions\Fortify\ResetUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\TwoFactorAuthenticationProvider' => \Laravel\Fortify\TwoFactorAuthenticationProvider::class,
|
||||
'Laravel\Fortify\Contracts\TwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\TwoFactorLoginResponse::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserPasswords' => \App\Users\Actions\UpdateUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserProfileInformation' => \App\Users\Actions\UpdateUserProfileInformation::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserPasswords' => \App\Actions\Fortify\UpdateUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserProfileInformation' => \App\Actions\Fortify\UpdateUserProfileInformation::class,
|
||||
'Laravel\Scout\EngineManager' => \Laravel\Scout\EngineManager::class,
|
||||
'NunoMaduro\Collision\Contracts\Provider' => \NunoMaduro\Collision\Provider::class,
|
||||
'Spatie\Backup\Helpers\ConsoleOutput' => \Spatie\Backup\Helpers\ConsoleOutput::class,
|
||||
'Spatie\Backup\Tasks\Cleanup\CleanupStrategy' => \Spatie\Backup\Tasks\Cleanup\Strategies\DefaultStrategy::class,
|
||||
'Spatie\QueryBuilder\QueryBuilderRequest' => \Spatie\QueryBuilder\QueryBuilderRequest::class,
|
||||
'Stripe\Util\LoggerInterface' => \Laravel\Cashier\Logger::class,
|
||||
'Whoops\Handler\HandlerInterface' => \Facade\Ignition\ErrorPage\IgnitionWhoopsHandler::class,
|
||||
'auth' => \Illuminate\Auth\AuthManager::class,
|
||||
@@ -700,7 +690,6 @@ namespace PHPSTORM_META {
|
||||
'command.config.clear' => \Illuminate\Foundation\Console\ConfigClearCommand::class,
|
||||
'command.console.make' => \Illuminate\Foundation\Console\ConsoleMakeCommand::class,
|
||||
'command.controller.make' => \Illuminate\Routing\Console\ControllerMakeCommand::class,
|
||||
'command.db.prune' => \Illuminate\Database\Console\PruneCommand::class,
|
||||
'command.db.wipe' => \Illuminate\Database\Console\WipeCommand::class,
|
||||
'command.down' => \Illuminate\Foundation\Console\DownCommand::class,
|
||||
'command.environment' => \Illuminate\Foundation\Console\EnvironmentCommand::class,
|
||||
@@ -748,7 +737,6 @@ namespace PHPSTORM_META {
|
||||
'command.queue.forget' => \Illuminate\Queue\Console\ForgetFailedCommand::class,
|
||||
'command.queue.listen' => \Illuminate\Queue\Console\ListenCommand::class,
|
||||
'command.queue.prune-batches' => \Illuminate\Queue\Console\PruneBatchesCommand::class,
|
||||
'command.queue.prune-failed-jobs' => \Illuminate\Queue\Console\PruneFailedJobsCommand::class,
|
||||
'command.queue.restart' => \Illuminate\Queue\Console\RestartCommand::class,
|
||||
'command.queue.retry' => \Illuminate\Queue\Console\RetryCommand::class,
|
||||
'command.queue.retry-batch' => \Illuminate\Queue\Console\RetryBatchCommand::class,
|
||||
@@ -859,24 +847,23 @@ namespace PHPSTORM_META {
|
||||
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
|
||||
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
|
||||
'LaravelCrawlerDetect' => \Jaybizzle\CrawlerDetect\CrawlerDetect::class,
|
||||
'Laravel\Fortify\Contracts\CreatesNewUsers' => \App\Actions\Fortify\CreateNewUser::class,
|
||||
'Laravel\Fortify\Contracts\FailedPasswordConfirmationResponse' => \Laravel\Fortify\Http\Responses\FailedPasswordConfirmationResponse::class,
|
||||
'Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\FailedTwoFactorLoginResponse::class,
|
||||
'Laravel\Fortify\Contracts\LockoutResponse' => \Laravel\Fortify\Http\Responses\LockoutResponse::class,
|
||||
'Laravel\Fortify\Contracts\LoginResponse' => \Laravel\Fortify\Http\Responses\LoginResponse::class,
|
||||
'Laravel\Fortify\Contracts\LogoutResponse' => \Laravel\Fortify\Http\Responses\LogoutResponse::class,
|
||||
'Laravel\Fortify\Contracts\PasswordConfirmedResponse' => \Laravel\Fortify\Http\Responses\PasswordConfirmedResponse::class,
|
||||
'Laravel\Fortify\Contracts\PasswordUpdateResponse' => \Laravel\Fortify\Http\Responses\PasswordUpdateResponse::class,
|
||||
'Laravel\Fortify\Contracts\RegisterResponse' => \Laravel\Fortify\Http\Responses\RegisterResponse::class,
|
||||
'Laravel\Fortify\Contracts\ResetsUserPasswords' => \App\Users\Actions\ResetUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\ResetsUserPasswords' => \App\Actions\Fortify\ResetUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\TwoFactorAuthenticationProvider' => \Laravel\Fortify\TwoFactorAuthenticationProvider::class,
|
||||
'Laravel\Fortify\Contracts\TwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\TwoFactorLoginResponse::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserPasswords' => \App\Users\Actions\UpdateUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserProfileInformation' => \App\Users\Actions\UpdateUserProfileInformation::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserPasswords' => \App\Actions\Fortify\UpdateUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserProfileInformation' => \App\Actions\Fortify\UpdateUserProfileInformation::class,
|
||||
'Laravel\Scout\EngineManager' => \Laravel\Scout\EngineManager::class,
|
||||
'NunoMaduro\Collision\Contracts\Provider' => \NunoMaduro\Collision\Provider::class,
|
||||
'Spatie\Backup\Helpers\ConsoleOutput' => \Spatie\Backup\Helpers\ConsoleOutput::class,
|
||||
'Spatie\Backup\Tasks\Cleanup\CleanupStrategy' => \Spatie\Backup\Tasks\Cleanup\Strategies\DefaultStrategy::class,
|
||||
'Spatie\QueryBuilder\QueryBuilderRequest' => \Spatie\QueryBuilder\QueryBuilderRequest::class,
|
||||
'Stripe\Util\LoggerInterface' => \Laravel\Cashier\Logger::class,
|
||||
'Whoops\Handler\HandlerInterface' => \Facade\Ignition\ErrorPage\IgnitionWhoopsHandler::class,
|
||||
'auth' => \Illuminate\Auth\AuthManager::class,
|
||||
@@ -902,7 +889,6 @@ namespace PHPSTORM_META {
|
||||
'command.config.clear' => \Illuminate\Foundation\Console\ConfigClearCommand::class,
|
||||
'command.console.make' => \Illuminate\Foundation\Console\ConsoleMakeCommand::class,
|
||||
'command.controller.make' => \Illuminate\Routing\Console\ControllerMakeCommand::class,
|
||||
'command.db.prune' => \Illuminate\Database\Console\PruneCommand::class,
|
||||
'command.db.wipe' => \Illuminate\Database\Console\WipeCommand::class,
|
||||
'command.down' => \Illuminate\Foundation\Console\DownCommand::class,
|
||||
'command.environment' => \Illuminate\Foundation\Console\EnvironmentCommand::class,
|
||||
@@ -950,7 +936,6 @@ namespace PHPSTORM_META {
|
||||
'command.queue.forget' => \Illuminate\Queue\Console\ForgetFailedCommand::class,
|
||||
'command.queue.listen' => \Illuminate\Queue\Console\ListenCommand::class,
|
||||
'command.queue.prune-batches' => \Illuminate\Queue\Console\PruneBatchesCommand::class,
|
||||
'command.queue.prune-failed-jobs' => \Illuminate\Queue\Console\PruneFailedJobsCommand::class,
|
||||
'command.queue.restart' => \Illuminate\Queue\Console\RestartCommand::class,
|
||||
'command.queue.retry' => \Illuminate\Queue\Console\RetryCommand::class,
|
||||
'command.queue.retry-batch' => \Illuminate\Queue\Console\RetryBatchCommand::class,
|
||||
@@ -1061,24 +1046,23 @@ namespace PHPSTORM_META {
|
||||
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
|
||||
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
|
||||
'LaravelCrawlerDetect' => \Jaybizzle\CrawlerDetect\CrawlerDetect::class,
|
||||
'Laravel\Fortify\Contracts\CreatesNewUsers' => \App\Actions\Fortify\CreateNewUser::class,
|
||||
'Laravel\Fortify\Contracts\FailedPasswordConfirmationResponse' => \Laravel\Fortify\Http\Responses\FailedPasswordConfirmationResponse::class,
|
||||
'Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\FailedTwoFactorLoginResponse::class,
|
||||
'Laravel\Fortify\Contracts\LockoutResponse' => \Laravel\Fortify\Http\Responses\LockoutResponse::class,
|
||||
'Laravel\Fortify\Contracts\LoginResponse' => \Laravel\Fortify\Http\Responses\LoginResponse::class,
|
||||
'Laravel\Fortify\Contracts\LogoutResponse' => \Laravel\Fortify\Http\Responses\LogoutResponse::class,
|
||||
'Laravel\Fortify\Contracts\PasswordConfirmedResponse' => \Laravel\Fortify\Http\Responses\PasswordConfirmedResponse::class,
|
||||
'Laravel\Fortify\Contracts\PasswordUpdateResponse' => \Laravel\Fortify\Http\Responses\PasswordUpdateResponse::class,
|
||||
'Laravel\Fortify\Contracts\RegisterResponse' => \Laravel\Fortify\Http\Responses\RegisterResponse::class,
|
||||
'Laravel\Fortify\Contracts\ResetsUserPasswords' => \App\Users\Actions\ResetUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\ResetsUserPasswords' => \App\Actions\Fortify\ResetUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\TwoFactorAuthenticationProvider' => \Laravel\Fortify\TwoFactorAuthenticationProvider::class,
|
||||
'Laravel\Fortify\Contracts\TwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\TwoFactorLoginResponse::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserPasswords' => \App\Users\Actions\UpdateUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserProfileInformation' => \App\Users\Actions\UpdateUserProfileInformation::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserPasswords' => \App\Actions\Fortify\UpdateUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserProfileInformation' => \App\Actions\Fortify\UpdateUserProfileInformation::class,
|
||||
'Laravel\Scout\EngineManager' => \Laravel\Scout\EngineManager::class,
|
||||
'NunoMaduro\Collision\Contracts\Provider' => \NunoMaduro\Collision\Provider::class,
|
||||
'Spatie\Backup\Helpers\ConsoleOutput' => \Spatie\Backup\Helpers\ConsoleOutput::class,
|
||||
'Spatie\Backup\Tasks\Cleanup\CleanupStrategy' => \Spatie\Backup\Tasks\Cleanup\Strategies\DefaultStrategy::class,
|
||||
'Spatie\QueryBuilder\QueryBuilderRequest' => \Spatie\QueryBuilder\QueryBuilderRequest::class,
|
||||
'Stripe\Util\LoggerInterface' => \Laravel\Cashier\Logger::class,
|
||||
'Whoops\Handler\HandlerInterface' => \Facade\Ignition\ErrorPage\IgnitionWhoopsHandler::class,
|
||||
'auth' => \Illuminate\Auth\AuthManager::class,
|
||||
@@ -1104,7 +1088,6 @@ namespace PHPSTORM_META {
|
||||
'command.config.clear' => \Illuminate\Foundation\Console\ConfigClearCommand::class,
|
||||
'command.console.make' => \Illuminate\Foundation\Console\ConsoleMakeCommand::class,
|
||||
'command.controller.make' => \Illuminate\Routing\Console\ControllerMakeCommand::class,
|
||||
'command.db.prune' => \Illuminate\Database\Console\PruneCommand::class,
|
||||
'command.db.wipe' => \Illuminate\Database\Console\WipeCommand::class,
|
||||
'command.down' => \Illuminate\Foundation\Console\DownCommand::class,
|
||||
'command.environment' => \Illuminate\Foundation\Console\EnvironmentCommand::class,
|
||||
@@ -1152,7 +1135,6 @@ namespace PHPSTORM_META {
|
||||
'command.queue.forget' => \Illuminate\Queue\Console\ForgetFailedCommand::class,
|
||||
'command.queue.listen' => \Illuminate\Queue\Console\ListenCommand::class,
|
||||
'command.queue.prune-batches' => \Illuminate\Queue\Console\PruneBatchesCommand::class,
|
||||
'command.queue.prune-failed-jobs' => \Illuminate\Queue\Console\PruneFailedJobsCommand::class,
|
||||
'command.queue.restart' => \Illuminate\Queue\Console\RestartCommand::class,
|
||||
'command.queue.retry' => \Illuminate\Queue\Console\RetryCommand::class,
|
||||
'command.queue.retry-batch' => \Illuminate\Queue\Console\RetryBatchCommand::class,
|
||||
@@ -1263,24 +1245,23 @@ namespace PHPSTORM_META {
|
||||
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
|
||||
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
|
||||
'LaravelCrawlerDetect' => \Jaybizzle\CrawlerDetect\CrawlerDetect::class,
|
||||
'Laravel\Fortify\Contracts\CreatesNewUsers' => \App\Actions\Fortify\CreateNewUser::class,
|
||||
'Laravel\Fortify\Contracts\FailedPasswordConfirmationResponse' => \Laravel\Fortify\Http\Responses\FailedPasswordConfirmationResponse::class,
|
||||
'Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\FailedTwoFactorLoginResponse::class,
|
||||
'Laravel\Fortify\Contracts\LockoutResponse' => \Laravel\Fortify\Http\Responses\LockoutResponse::class,
|
||||
'Laravel\Fortify\Contracts\LoginResponse' => \Laravel\Fortify\Http\Responses\LoginResponse::class,
|
||||
'Laravel\Fortify\Contracts\LogoutResponse' => \Laravel\Fortify\Http\Responses\LogoutResponse::class,
|
||||
'Laravel\Fortify\Contracts\PasswordConfirmedResponse' => \Laravel\Fortify\Http\Responses\PasswordConfirmedResponse::class,
|
||||
'Laravel\Fortify\Contracts\PasswordUpdateResponse' => \Laravel\Fortify\Http\Responses\PasswordUpdateResponse::class,
|
||||
'Laravel\Fortify\Contracts\RegisterResponse' => \Laravel\Fortify\Http\Responses\RegisterResponse::class,
|
||||
'Laravel\Fortify\Contracts\ResetsUserPasswords' => \App\Users\Actions\ResetUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\ResetsUserPasswords' => \App\Actions\Fortify\ResetUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\TwoFactorAuthenticationProvider' => \Laravel\Fortify\TwoFactorAuthenticationProvider::class,
|
||||
'Laravel\Fortify\Contracts\TwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\TwoFactorLoginResponse::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserPasswords' => \App\Users\Actions\UpdateUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserProfileInformation' => \App\Users\Actions\UpdateUserProfileInformation::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserPasswords' => \App\Actions\Fortify\UpdateUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserProfileInformation' => \App\Actions\Fortify\UpdateUserProfileInformation::class,
|
||||
'Laravel\Scout\EngineManager' => \Laravel\Scout\EngineManager::class,
|
||||
'NunoMaduro\Collision\Contracts\Provider' => \NunoMaduro\Collision\Provider::class,
|
||||
'Spatie\Backup\Helpers\ConsoleOutput' => \Spatie\Backup\Helpers\ConsoleOutput::class,
|
||||
'Spatie\Backup\Tasks\Cleanup\CleanupStrategy' => \Spatie\Backup\Tasks\Cleanup\Strategies\DefaultStrategy::class,
|
||||
'Spatie\QueryBuilder\QueryBuilderRequest' => \Spatie\QueryBuilder\QueryBuilderRequest::class,
|
||||
'Stripe\Util\LoggerInterface' => \Laravel\Cashier\Logger::class,
|
||||
'Whoops\Handler\HandlerInterface' => \Facade\Ignition\ErrorPage\IgnitionWhoopsHandler::class,
|
||||
'auth' => \Illuminate\Auth\AuthManager::class,
|
||||
@@ -1306,7 +1287,6 @@ namespace PHPSTORM_META {
|
||||
'command.config.clear' => \Illuminate\Foundation\Console\ConfigClearCommand::class,
|
||||
'command.console.make' => \Illuminate\Foundation\Console\ConsoleMakeCommand::class,
|
||||
'command.controller.make' => \Illuminate\Routing\Console\ControllerMakeCommand::class,
|
||||
'command.db.prune' => \Illuminate\Database\Console\PruneCommand::class,
|
||||
'command.db.wipe' => \Illuminate\Database\Console\WipeCommand::class,
|
||||
'command.down' => \Illuminate\Foundation\Console\DownCommand::class,
|
||||
'command.environment' => \Illuminate\Foundation\Console\EnvironmentCommand::class,
|
||||
@@ -1354,7 +1334,6 @@ namespace PHPSTORM_META {
|
||||
'command.queue.forget' => \Illuminate\Queue\Console\ForgetFailedCommand::class,
|
||||
'command.queue.listen' => \Illuminate\Queue\Console\ListenCommand::class,
|
||||
'command.queue.prune-batches' => \Illuminate\Queue\Console\PruneBatchesCommand::class,
|
||||
'command.queue.prune-failed-jobs' => \Illuminate\Queue\Console\PruneFailedJobsCommand::class,
|
||||
'command.queue.restart' => \Illuminate\Queue\Console\RestartCommand::class,
|
||||
'command.queue.retry' => \Illuminate\Queue\Console\RetryCommand::class,
|
||||
'command.queue.retry-batch' => \Illuminate\Queue\Console\RetryBatchCommand::class,
|
||||
@@ -1465,24 +1444,23 @@ namespace PHPSTORM_META {
|
||||
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
|
||||
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
|
||||
'LaravelCrawlerDetect' => \Jaybizzle\CrawlerDetect\CrawlerDetect::class,
|
||||
'Laravel\Fortify\Contracts\CreatesNewUsers' => \App\Actions\Fortify\CreateNewUser::class,
|
||||
'Laravel\Fortify\Contracts\FailedPasswordConfirmationResponse' => \Laravel\Fortify\Http\Responses\FailedPasswordConfirmationResponse::class,
|
||||
'Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\FailedTwoFactorLoginResponse::class,
|
||||
'Laravel\Fortify\Contracts\LockoutResponse' => \Laravel\Fortify\Http\Responses\LockoutResponse::class,
|
||||
'Laravel\Fortify\Contracts\LoginResponse' => \Laravel\Fortify\Http\Responses\LoginResponse::class,
|
||||
'Laravel\Fortify\Contracts\LogoutResponse' => \Laravel\Fortify\Http\Responses\LogoutResponse::class,
|
||||
'Laravel\Fortify\Contracts\PasswordConfirmedResponse' => \Laravel\Fortify\Http\Responses\PasswordConfirmedResponse::class,
|
||||
'Laravel\Fortify\Contracts\PasswordUpdateResponse' => \Laravel\Fortify\Http\Responses\PasswordUpdateResponse::class,
|
||||
'Laravel\Fortify\Contracts\RegisterResponse' => \Laravel\Fortify\Http\Responses\RegisterResponse::class,
|
||||
'Laravel\Fortify\Contracts\ResetsUserPasswords' => \App\Users\Actions\ResetUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\ResetsUserPasswords' => \App\Actions\Fortify\ResetUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\TwoFactorAuthenticationProvider' => \Laravel\Fortify\TwoFactorAuthenticationProvider::class,
|
||||
'Laravel\Fortify\Contracts\TwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\TwoFactorLoginResponse::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserPasswords' => \App\Users\Actions\UpdateUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserProfileInformation' => \App\Users\Actions\UpdateUserProfileInformation::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserPasswords' => \App\Actions\Fortify\UpdateUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserProfileInformation' => \App\Actions\Fortify\UpdateUserProfileInformation::class,
|
||||
'Laravel\Scout\EngineManager' => \Laravel\Scout\EngineManager::class,
|
||||
'NunoMaduro\Collision\Contracts\Provider' => \NunoMaduro\Collision\Provider::class,
|
||||
'Spatie\Backup\Helpers\ConsoleOutput' => \Spatie\Backup\Helpers\ConsoleOutput::class,
|
||||
'Spatie\Backup\Tasks\Cleanup\CleanupStrategy' => \Spatie\Backup\Tasks\Cleanup\Strategies\DefaultStrategy::class,
|
||||
'Spatie\QueryBuilder\QueryBuilderRequest' => \Spatie\QueryBuilder\QueryBuilderRequest::class,
|
||||
'Stripe\Util\LoggerInterface' => \Laravel\Cashier\Logger::class,
|
||||
'Whoops\Handler\HandlerInterface' => \Facade\Ignition\ErrorPage\IgnitionWhoopsHandler::class,
|
||||
'auth' => \Illuminate\Auth\AuthManager::class,
|
||||
@@ -1508,7 +1486,6 @@ namespace PHPSTORM_META {
|
||||
'command.config.clear' => \Illuminate\Foundation\Console\ConfigClearCommand::class,
|
||||
'command.console.make' => \Illuminate\Foundation\Console\ConsoleMakeCommand::class,
|
||||
'command.controller.make' => \Illuminate\Routing\Console\ControllerMakeCommand::class,
|
||||
'command.db.prune' => \Illuminate\Database\Console\PruneCommand::class,
|
||||
'command.db.wipe' => \Illuminate\Database\Console\WipeCommand::class,
|
||||
'command.down' => \Illuminate\Foundation\Console\DownCommand::class,
|
||||
'command.environment' => \Illuminate\Foundation\Console\EnvironmentCommand::class,
|
||||
@@ -1556,7 +1533,6 @@ namespace PHPSTORM_META {
|
||||
'command.queue.forget' => \Illuminate\Queue\Console\ForgetFailedCommand::class,
|
||||
'command.queue.listen' => \Illuminate\Queue\Console\ListenCommand::class,
|
||||
'command.queue.prune-batches' => \Illuminate\Queue\Console\PruneBatchesCommand::class,
|
||||
'command.queue.prune-failed-jobs' => \Illuminate\Queue\Console\PruneFailedJobsCommand::class,
|
||||
'command.queue.restart' => \Illuminate\Queue\Console\RestartCommand::class,
|
||||
'command.queue.retry' => \Illuminate\Queue\Console\RetryCommand::class,
|
||||
'command.queue.retry-batch' => \Illuminate\Queue\Console\RetryBatchCommand::class,
|
||||
@@ -1667,24 +1643,23 @@ namespace PHPSTORM_META {
|
||||
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
|
||||
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
|
||||
'LaravelCrawlerDetect' => \Jaybizzle\CrawlerDetect\CrawlerDetect::class,
|
||||
'Laravel\Fortify\Contracts\CreatesNewUsers' => \App\Actions\Fortify\CreateNewUser::class,
|
||||
'Laravel\Fortify\Contracts\FailedPasswordConfirmationResponse' => \Laravel\Fortify\Http\Responses\FailedPasswordConfirmationResponse::class,
|
||||
'Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\FailedTwoFactorLoginResponse::class,
|
||||
'Laravel\Fortify\Contracts\LockoutResponse' => \Laravel\Fortify\Http\Responses\LockoutResponse::class,
|
||||
'Laravel\Fortify\Contracts\LoginResponse' => \Laravel\Fortify\Http\Responses\LoginResponse::class,
|
||||
'Laravel\Fortify\Contracts\LogoutResponse' => \Laravel\Fortify\Http\Responses\LogoutResponse::class,
|
||||
'Laravel\Fortify\Contracts\PasswordConfirmedResponse' => \Laravel\Fortify\Http\Responses\PasswordConfirmedResponse::class,
|
||||
'Laravel\Fortify\Contracts\PasswordUpdateResponse' => \Laravel\Fortify\Http\Responses\PasswordUpdateResponse::class,
|
||||
'Laravel\Fortify\Contracts\RegisterResponse' => \Laravel\Fortify\Http\Responses\RegisterResponse::class,
|
||||
'Laravel\Fortify\Contracts\ResetsUserPasswords' => \App\Users\Actions\ResetUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\ResetsUserPasswords' => \App\Actions\Fortify\ResetUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\TwoFactorAuthenticationProvider' => \Laravel\Fortify\TwoFactorAuthenticationProvider::class,
|
||||
'Laravel\Fortify\Contracts\TwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\TwoFactorLoginResponse::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserPasswords' => \App\Users\Actions\UpdateUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserProfileInformation' => \App\Users\Actions\UpdateUserProfileInformation::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserPasswords' => \App\Actions\Fortify\UpdateUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserProfileInformation' => \App\Actions\Fortify\UpdateUserProfileInformation::class,
|
||||
'Laravel\Scout\EngineManager' => \Laravel\Scout\EngineManager::class,
|
||||
'NunoMaduro\Collision\Contracts\Provider' => \NunoMaduro\Collision\Provider::class,
|
||||
'Spatie\Backup\Helpers\ConsoleOutput' => \Spatie\Backup\Helpers\ConsoleOutput::class,
|
||||
'Spatie\Backup\Tasks\Cleanup\CleanupStrategy' => \Spatie\Backup\Tasks\Cleanup\Strategies\DefaultStrategy::class,
|
||||
'Spatie\QueryBuilder\QueryBuilderRequest' => \Spatie\QueryBuilder\QueryBuilderRequest::class,
|
||||
'Stripe\Util\LoggerInterface' => \Laravel\Cashier\Logger::class,
|
||||
'Whoops\Handler\HandlerInterface' => \Facade\Ignition\ErrorPage\IgnitionWhoopsHandler::class,
|
||||
'auth' => \Illuminate\Auth\AuthManager::class,
|
||||
@@ -1710,7 +1685,6 @@ namespace PHPSTORM_META {
|
||||
'command.config.clear' => \Illuminate\Foundation\Console\ConfigClearCommand::class,
|
||||
'command.console.make' => \Illuminate\Foundation\Console\ConsoleMakeCommand::class,
|
||||
'command.controller.make' => \Illuminate\Routing\Console\ControllerMakeCommand::class,
|
||||
'command.db.prune' => \Illuminate\Database\Console\PruneCommand::class,
|
||||
'command.db.wipe' => \Illuminate\Database\Console\WipeCommand::class,
|
||||
'command.down' => \Illuminate\Foundation\Console\DownCommand::class,
|
||||
'command.environment' => \Illuminate\Foundation\Console\EnvironmentCommand::class,
|
||||
@@ -1758,7 +1732,6 @@ namespace PHPSTORM_META {
|
||||
'command.queue.forget' => \Illuminate\Queue\Console\ForgetFailedCommand::class,
|
||||
'command.queue.listen' => \Illuminate\Queue\Console\ListenCommand::class,
|
||||
'command.queue.prune-batches' => \Illuminate\Queue\Console\PruneBatchesCommand::class,
|
||||
'command.queue.prune-failed-jobs' => \Illuminate\Queue\Console\PruneFailedJobsCommand::class,
|
||||
'command.queue.restart' => \Illuminate\Queue\Console\RestartCommand::class,
|
||||
'command.queue.retry' => \Illuminate\Queue\Console\RetryCommand::class,
|
||||
'command.queue.retry-batch' => \Illuminate\Queue\Console\RetryBatchCommand::class,
|
||||
@@ -1869,24 +1842,23 @@ namespace PHPSTORM_META {
|
||||
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
|
||||
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
|
||||
'LaravelCrawlerDetect' => \Jaybizzle\CrawlerDetect\CrawlerDetect::class,
|
||||
'Laravel\Fortify\Contracts\CreatesNewUsers' => \App\Actions\Fortify\CreateNewUser::class,
|
||||
'Laravel\Fortify\Contracts\FailedPasswordConfirmationResponse' => \Laravel\Fortify\Http\Responses\FailedPasswordConfirmationResponse::class,
|
||||
'Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\FailedTwoFactorLoginResponse::class,
|
||||
'Laravel\Fortify\Contracts\LockoutResponse' => \Laravel\Fortify\Http\Responses\LockoutResponse::class,
|
||||
'Laravel\Fortify\Contracts\LoginResponse' => \Laravel\Fortify\Http\Responses\LoginResponse::class,
|
||||
'Laravel\Fortify\Contracts\LogoutResponse' => \Laravel\Fortify\Http\Responses\LogoutResponse::class,
|
||||
'Laravel\Fortify\Contracts\PasswordConfirmedResponse' => \Laravel\Fortify\Http\Responses\PasswordConfirmedResponse::class,
|
||||
'Laravel\Fortify\Contracts\PasswordUpdateResponse' => \Laravel\Fortify\Http\Responses\PasswordUpdateResponse::class,
|
||||
'Laravel\Fortify\Contracts\RegisterResponse' => \Laravel\Fortify\Http\Responses\RegisterResponse::class,
|
||||
'Laravel\Fortify\Contracts\ResetsUserPasswords' => \App\Users\Actions\ResetUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\ResetsUserPasswords' => \App\Actions\Fortify\ResetUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\TwoFactorAuthenticationProvider' => \Laravel\Fortify\TwoFactorAuthenticationProvider::class,
|
||||
'Laravel\Fortify\Contracts\TwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\TwoFactorLoginResponse::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserPasswords' => \App\Users\Actions\UpdateUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserProfileInformation' => \App\Users\Actions\UpdateUserProfileInformation::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserPasswords' => \App\Actions\Fortify\UpdateUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserProfileInformation' => \App\Actions\Fortify\UpdateUserProfileInformation::class,
|
||||
'Laravel\Scout\EngineManager' => \Laravel\Scout\EngineManager::class,
|
||||
'NunoMaduro\Collision\Contracts\Provider' => \NunoMaduro\Collision\Provider::class,
|
||||
'Spatie\Backup\Helpers\ConsoleOutput' => \Spatie\Backup\Helpers\ConsoleOutput::class,
|
||||
'Spatie\Backup\Tasks\Cleanup\CleanupStrategy' => \Spatie\Backup\Tasks\Cleanup\Strategies\DefaultStrategy::class,
|
||||
'Spatie\QueryBuilder\QueryBuilderRequest' => \Spatie\QueryBuilder\QueryBuilderRequest::class,
|
||||
'Stripe\Util\LoggerInterface' => \Laravel\Cashier\Logger::class,
|
||||
'Whoops\Handler\HandlerInterface' => \Facade\Ignition\ErrorPage\IgnitionWhoopsHandler::class,
|
||||
'auth' => \Illuminate\Auth\AuthManager::class,
|
||||
@@ -1912,7 +1884,6 @@ namespace PHPSTORM_META {
|
||||
'command.config.clear' => \Illuminate\Foundation\Console\ConfigClearCommand::class,
|
||||
'command.console.make' => \Illuminate\Foundation\Console\ConsoleMakeCommand::class,
|
||||
'command.controller.make' => \Illuminate\Routing\Console\ControllerMakeCommand::class,
|
||||
'command.db.prune' => \Illuminate\Database\Console\PruneCommand::class,
|
||||
'command.db.wipe' => \Illuminate\Database\Console\WipeCommand::class,
|
||||
'command.down' => \Illuminate\Foundation\Console\DownCommand::class,
|
||||
'command.environment' => \Illuminate\Foundation\Console\EnvironmentCommand::class,
|
||||
@@ -1960,7 +1931,6 @@ namespace PHPSTORM_META {
|
||||
'command.queue.forget' => \Illuminate\Queue\Console\ForgetFailedCommand::class,
|
||||
'command.queue.listen' => \Illuminate\Queue\Console\ListenCommand::class,
|
||||
'command.queue.prune-batches' => \Illuminate\Queue\Console\PruneBatchesCommand::class,
|
||||
'command.queue.prune-failed-jobs' => \Illuminate\Queue\Console\PruneFailedJobsCommand::class,
|
||||
'command.queue.restart' => \Illuminate\Queue\Console\RestartCommand::class,
|
||||
'command.queue.retry' => \Illuminate\Queue\Console\RetryCommand::class,
|
||||
'command.queue.retry-batch' => \Illuminate\Queue\Console\RetryBatchCommand::class,
|
||||
@@ -2071,24 +2041,23 @@ namespace PHPSTORM_META {
|
||||
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
|
||||
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
|
||||
'LaravelCrawlerDetect' => \Jaybizzle\CrawlerDetect\CrawlerDetect::class,
|
||||
'Laravel\Fortify\Contracts\CreatesNewUsers' => \App\Actions\Fortify\CreateNewUser::class,
|
||||
'Laravel\Fortify\Contracts\FailedPasswordConfirmationResponse' => \Laravel\Fortify\Http\Responses\FailedPasswordConfirmationResponse::class,
|
||||
'Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\FailedTwoFactorLoginResponse::class,
|
||||
'Laravel\Fortify\Contracts\LockoutResponse' => \Laravel\Fortify\Http\Responses\LockoutResponse::class,
|
||||
'Laravel\Fortify\Contracts\LoginResponse' => \Laravel\Fortify\Http\Responses\LoginResponse::class,
|
||||
'Laravel\Fortify\Contracts\LogoutResponse' => \Laravel\Fortify\Http\Responses\LogoutResponse::class,
|
||||
'Laravel\Fortify\Contracts\PasswordConfirmedResponse' => \Laravel\Fortify\Http\Responses\PasswordConfirmedResponse::class,
|
||||
'Laravel\Fortify\Contracts\PasswordUpdateResponse' => \Laravel\Fortify\Http\Responses\PasswordUpdateResponse::class,
|
||||
'Laravel\Fortify\Contracts\RegisterResponse' => \Laravel\Fortify\Http\Responses\RegisterResponse::class,
|
||||
'Laravel\Fortify\Contracts\ResetsUserPasswords' => \App\Users\Actions\ResetUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\ResetsUserPasswords' => \App\Actions\Fortify\ResetUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\TwoFactorAuthenticationProvider' => \Laravel\Fortify\TwoFactorAuthenticationProvider::class,
|
||||
'Laravel\Fortify\Contracts\TwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\TwoFactorLoginResponse::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserPasswords' => \App\Users\Actions\UpdateUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserProfileInformation' => \App\Users\Actions\UpdateUserProfileInformation::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserPasswords' => \App\Actions\Fortify\UpdateUserPassword::class,
|
||||
'Laravel\Fortify\Contracts\UpdatesUserProfileInformation' => \App\Actions\Fortify\UpdateUserProfileInformation::class,
|
||||
'Laravel\Scout\EngineManager' => \Laravel\Scout\EngineManager::class,
|
||||
'NunoMaduro\Collision\Contracts\Provider' => \NunoMaduro\Collision\Provider::class,
|
||||
'Spatie\Backup\Helpers\ConsoleOutput' => \Spatie\Backup\Helpers\ConsoleOutput::class,
|
||||
'Spatie\Backup\Tasks\Cleanup\CleanupStrategy' => \Spatie\Backup\Tasks\Cleanup\Strategies\DefaultStrategy::class,
|
||||
'Spatie\QueryBuilder\QueryBuilderRequest' => \Spatie\QueryBuilder\QueryBuilderRequest::class,
|
||||
'Stripe\Util\LoggerInterface' => \Laravel\Cashier\Logger::class,
|
||||
'Whoops\Handler\HandlerInterface' => \Facade\Ignition\ErrorPage\IgnitionWhoopsHandler::class,
|
||||
'auth' => \Illuminate\Auth\AuthManager::class,
|
||||
@@ -2114,7 +2083,6 @@ namespace PHPSTORM_META {
|
||||
'command.config.clear' => \Illuminate\Foundation\Console\ConfigClearCommand::class,
|
||||
'command.console.make' => \Illuminate\Foundation\Console\ConsoleMakeCommand::class,
|
||||
'command.controller.make' => \Illuminate\Routing\Console\ControllerMakeCommand::class,
|
||||
'command.db.prune' => \Illuminate\Database\Console\PruneCommand::class,
|
||||
'command.db.wipe' => \Illuminate\Database\Console\WipeCommand::class,
|
||||
'command.down' => \Illuminate\Foundation\Console\DownCommand::class,
|
||||
'command.environment' => \Illuminate\Foundation\Console\EnvironmentCommand::class,
|
||||
@@ -2162,7 +2130,6 @@ namespace PHPSTORM_META {
|
||||
'command.queue.forget' => \Illuminate\Queue\Console\ForgetFailedCommand::class,
|
||||
'command.queue.listen' => \Illuminate\Queue\Console\ListenCommand::class,
|
||||
'command.queue.prune-batches' => \Illuminate\Queue\Console\PruneBatchesCommand::class,
|
||||
'command.queue.prune-failed-jobs' => \Illuminate\Queue\Console\PruneFailedJobsCommand::class,
|
||||
'command.queue.restart' => \Illuminate\Queue\Console\RestartCommand::class,
|
||||
'command.queue.retry' => \Illuminate\Queue\Console\RetryCommand::class,
|
||||
'command.queue.retry-batch' => \Illuminate\Queue\Console\RetryBatchCommand::class,
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
trailingComma: "es5"
|
||||
tabWidth: 4
|
||||
semi: false
|
||||
singleQuote: true
|
||||
printWidth: 120
|
||||
172
README.md
172
README.md
@@ -1,34 +1,48 @@
|
||||
[](https://github.com/MakingCG/vuefilemanager/actions/workflows/build.yml)
|
||||
[](https://github.com/MakingCG/vuefilemanager/actions/workflows/unit-testing.yml)
|
||||
|
||||

|
||||
# Private Cloud Storage Build by Laravel & Vue.js
|
||||
# Private Cloud Storage Build on Laravel & Vue.js
|
||||
|
||||
## Contents
|
||||
|
||||
- [Installation](#installation)
|
||||
- [Server Requirements](#server-requirements)
|
||||
- [Installation](#installation)
|
||||
- [Nginx Configuration](#nginx-configuration)
|
||||
- [Apache Configuration](#apache-configuration)
|
||||
- [Server Requirements](#server-requirements)
|
||||
- [Installation](#installation)
|
||||
- [PHP Configuration](#php-configuration)
|
||||
- [Chunk Upload](#chunk-upload)
|
||||
- [Nginx Configuration](#nginx-configuration)
|
||||
- [Apache Configuration](#apache-configuration)
|
||||
- [Upgrade Guide](#upgrade-guide)
|
||||
- [Payments](#payments)
|
||||
- [Get your active plans](#get-your-active-plans)
|
||||
- [Manage Failed Payments](#manage-failed-payments)
|
||||
- [Tax Rates](#tax-rates)
|
||||
- [Developers](#developers)
|
||||
- [Running development environment on your localhost](#running-development-environment-on-your-localhost)
|
||||
- [Supported Storages](#supported-storages)
|
||||
- [Others](#others)
|
||||
- [Support](#support)
|
||||
- [Security Vulnerabilities](#security-vulnerabilities)
|
||||
- [Changelog](#changelog)
|
||||
- [Support](#support)
|
||||
- [Security Vulnerabilities](#security-vulnerabilities)
|
||||
|
||||
|
||||
# Installation
|
||||
## Server Requirements
|
||||
|
||||
**For running app make sure you have:**
|
||||
|
||||
- PHP >= 8.0.2 version (8.1+ recommended)
|
||||
**For running app make sure you have installed:**
|
||||
|
||||
- PHP >= 7.3 version
|
||||
- MySQL 5.6+
|
||||
- Nginx or Apache
|
||||
|
||||
**These PHP Extensions are require:**
|
||||
|
||||
- Intl
|
||||
- GD
|
||||
- BCMath
|
||||
- PDO
|
||||
- SQLite3
|
||||
- SQLite
|
||||
- Ctype
|
||||
- Fileinfo
|
||||
- JSON
|
||||
@@ -41,41 +55,59 @@
|
||||
## Installation
|
||||
|
||||
#### 1. Upload files on your server
|
||||
Upload project files to the web root folder of your domain. It's mostly located in `html`, `www` or `public_html` folder name.
|
||||
Upload project files to web root folder of your domain. It's mostly located in `html`, `www` or `public_html` folder name.
|
||||
|
||||
#### 2. Configure your domain host root folder
|
||||
Configure your web server's document root to point to the public directory of the files you previously uploaded. For example, if you've uploaded the files in `html` folder, your domain root directory should be changed to `html/project_files/public` folder or anything else where domain root is in project `/public` directory.
|
||||
#### 2. Configure your web root folder
|
||||
Configure your web server's document root to point to the public directory of the files you previously uploaded. For example, if you've uploaded the files in `html` folder, your domain root directory should be changed to `html/project_files/public` folder or anything else where domain root is in project `/public` directory.
|
||||
|
||||
#### 3. Set write permissions
|
||||
Set `755` permission (CHMOD) to these files and folders directory within all children subdirectories:
|
||||
Please don't try go to `yourdomain.com/public` URL address, you will have issue to verify your purchase code, this is not correct domain root setup, you must do this in your webhosting settings panel.
|
||||
|
||||
- /bootstrap
|
||||

|
||||
|
||||
#### 3. Check your .env file
|
||||
Make sure `.env` file was uploaded. This type of file can be hidden in default.
|
||||
|
||||
#### 4. Set write permissions
|
||||
Set `755` permission (CHMOD) to these file and folders directory within all children subdirectories:
|
||||
|
||||
- /bootstrap/cache
|
||||
- /storage
|
||||
- /.env
|
||||
|
||||
#### 4. Open your application in your web browser
|
||||
Then open your application in web browser. If everything works fine, you will be redirected to the setup wizard installation process.
|
||||
#### 5. Open your application in your web browser
|
||||
Then open your application in web browser. If everything works fine, you will be redirect to setup wizard installation process.
|
||||
|
||||
#### 5. Server Check
|
||||
On the first page you will see server check. Make sure all items are green. If not, then correct your server setup by recommended values and refresh your setup wizard page.
|
||||
At first step you have to verify your purchase code. **Subscription service with stripe payments is available only for Extended License.** If you can't verify your purchase code, check, if you did previously steps correctly.
|
||||
|
||||
#### 6. Follow setup wizard steps
|
||||
|
||||
That was the hardest part of installation process. Please follow instructions in every step of Setup Wizard to successfully install VueFileManager.
|
||||
That was the hardest part of installation proces. Please follow instructions in every step of Setup Wizard to successfully install VueFileManager.
|
||||
|
||||
#### 7. Set up Cron
|
||||
|
||||
Add the following Cron entry to your server. Just update your php path (if it's different) and project path:
|
||||
```
|
||||
* * * * * /usr/local/bin/php /www/html/your-project/artisan schedule:run >> /dev/null 2>&1
|
||||
* * * * * /usr/local/bin/php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1
|
||||
```
|
||||
|
||||
#### 8. Broadcasting
|
||||
## PHP Configuration
|
||||
There are several PHP settings good to know to setup before you try upload any file. Please set these values in your php.ini, we provide minimal setup for you. When you set `-1` then you set infinity limits.
|
||||
|
||||
Coming soon...
|
||||
```
|
||||
memory_limit = 512M
|
||||
upload_max_filesize = 128M
|
||||
post_max_size = 128M
|
||||
max_file_uploads = 50
|
||||
max_execution_time = 3600
|
||||
```
|
||||
|
||||
## Chunk & Multipart Upload
|
||||
VueFileManager in default supporting chunk upload. Default chunk upload size is `128MB`. If you wish change this default value, go to your `.env` and change `CHUNK_SIZE` attribute.
|
||||
|
||||
When you use external storage, and upload large files, to prevent failing upload process make sure you have enough space in your application space and set higher `max_execution_time` in your php.ini to move your files to external storage.
|
||||
|
||||
## Nginx Configuration
|
||||
If you running VueFileManager under Nginx, don't forget set this value in your `nginx.conf` file:
|
||||
If you running VueFileManager undex Nginx, don't forget set this value in your `nginx.conf` file:
|
||||
```
|
||||
http {
|
||||
client_max_body_size 1024M;
|
||||
@@ -135,41 +167,57 @@ Make sure you have enabled mod_rewrite. There is an example config for running V
|
||||
</VirtualHost>
|
||||
```
|
||||
|
||||
## Upgrade Guide
|
||||
### Common Instructions
|
||||
`Don't forget create backup of your database before make any changes in your production application. If you serve your files in local storage driver pay attention and don't delete your /storage folder!`
|
||||
|
||||
These instructions is applicable for all updates. Please follow this step:
|
||||
|
||||
- Just rewrite all project files with new excluded `/.env` file and `/storage` folder. These items must be preserved!
|
||||
|
||||
|
||||
# Payments
|
||||
VueFileManager is packed with **Stripe** payment options. To configure Stripe, you will be asked in Setup Wizard to set up. Or, if you skip this installation process, you will find stripe set up in you admin `Dashboard / Settings / Payments`.
|
||||
|
||||
## Manage Failed Payments
|
||||
VueFileManager manage failed payments with additional email notification. But, there is more you can do for better User Experience. There is some additionals option in Stripe, look on [prevent failed payments](https://dashboard.stripe.com/settings/billing/automatic).
|
||||
|
||||
## Tax Rates
|
||||
You are able to manage tax rates. When adding a new tax rate, if no Region is specified, the tax rate will apply to everyone. Add a [ISO 3166-1 alpha-2 country code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements) to the Region field if you wish to apply taxes per country.
|
||||
|
||||
Just log in to your stripe dashboard, and you will find taxes under `Dashboard / Products / Tax Rates`.
|
||||
|
||||
# Developers
|
||||
## Running development environment on your localhost
|
||||
|
||||
**For running development environment make sure you have:**
|
||||
|
||||
- Node >= 14
|
||||
- NPM >= 6
|
||||
|
||||
If you would like to express set up, please update your database credentials in .env file
|
||||
When you download repository from GitHub, you have to rename your `.env.example` file to `.env`. Then run command below in your terminal to install vendors. Composer is required.
|
||||
```
|
||||
DB_CONNECTION=mysql
|
||||
DB_HOST=127.0.0.1
|
||||
DB_PORT=3306
|
||||
DB_DATABASE=laravel
|
||||
DB_USERNAME=root
|
||||
DB_PASSWORD=
|
||||
composer install
|
||||
```
|
||||
|
||||
If you would like to generate demo content, run this command below. Demo account will be created with credentials `howdy@hi5ve.digital` and password `vuefilemanager`.
|
||||
Set your `APP_ENV` to local mode, in default, it's in production mode.
|
||||
```
|
||||
php artisan setup:dev
|
||||
APP_ENV=local
|
||||
```
|
||||
If you would like express installation without demo data, run this command below. Demo account will be created with credentials `howdy@hi5ve.digital` and password `vuefilemanager`.
|
||||
```
|
||||
php artisan setup:prod
|
||||
```
|
||||
After that, please make sure your current host/domain where you are running app is included in your .env SANCTUM_STATEFUL_DOMAINS variable.
|
||||
|
||||
Also, to debug application, set `APP_DEBUG` on true:
|
||||
```
|
||||
APP_DEBUG=true
|
||||
```
|
||||
|
||||
To start server on your localhost, run command below.
|
||||
To start server on your localhost, run command below. Then go to your generated localhost URL by terminal, and follow Setup Wizard steps to configure VueFileManager.
|
||||
```
|
||||
php artisan serve
|
||||
```
|
||||
|
||||
For developing Vue front-end, you have to install npm modules by this command:
|
||||
After successfully installation via Setup Wizard, stop your artisan server, clear config cache and run your artisan server again:
|
||||
```
|
||||
php artisan config:clear
|
||||
php artisan serve
|
||||
```
|
||||
*After any change in your .env you have to restart your artisan server to reload your config cache.*
|
||||
|
||||
To develop your Vue front-end, you have to install npm modules by this command:
|
||||
```
|
||||
npm install
|
||||
```
|
||||
@@ -184,6 +232,31 @@ To compiles for production build, run this command
|
||||
npm run prod
|
||||
```
|
||||
|
||||
## Supported Storages
|
||||
VueFileManager support these storages for your files:
|
||||
|
||||
- [Amazon Web Services S3](https://aws.amazon.com/s3/)
|
||||
- [Digital Ocean Spaces](https://www.digitalocean.com/products/spaces/)
|
||||
- [Object Cloud Storage by Wasabi](https://wasabi.com/)
|
||||
- [Backblaze B2 Cloud Storage](https://www.backblaze.com/b2/cloud-storage.html)
|
||||
- Your local disk
|
||||
|
||||
In case of installation process, you will be able to set storage driver and credentials. After this, you can change your credentials later in `/.env` file.
|
||||
|
||||
To set or change your storage driver, you have to edit `FILESYSTEM_DRIVER` in your `/.env` file. Supported drivers are `s3`, `spaces`, `wasabi`,`backblaze` or `local`:
|
||||
```
|
||||
FILESYSTEM_DRIVER=local
|
||||
```
|
||||
Then you can find corresponding credentials options for your storage driver like key, secret, region in `/.env` file.
|
||||
|
||||
# Others
|
||||
## Changelog
|
||||
|
||||
Refer to the [Changelog](https://vuefilemanager.com/changelog) for a full history of the project.
|
||||
|
||||
## GitHub Repository
|
||||
[Join our GitHub repository](https://vuefilemanager.com/github-access) to submit your issues or suggestions, track VueFileManager progress and get new updates as fast as possible.
|
||||
|
||||
## Support
|
||||
|
||||
The following support channels are available at your fingertips:
|
||||
@@ -191,8 +264,9 @@ The following support channels are available at your fingertips:
|
||||
- [CodeCanyon support message](https://codecanyon.net/item/vue-file-manager-with-laravel-backend/25815986/support)
|
||||
|
||||
## Supporting VueFileManager
|
||||
We are trying to make the best for VueFileManager. There are a lot of things to do, and a lot of features we can make.
|
||||
But, it can't be done without you, development is more and more complicated and we have to hire new colleagues to help us. There is couple way you can support us, and then, we support you with all great new features we can make. Thank you for participating on this awesome application!
|
||||
Hi, we are trying make the best experience with VueFileManager. There is a lot things to do, and a lot of features we can make.
|
||||
|
||||
But, it can't be done without you, development is more and more complicated and we have to hire new colleagues to help with it. There is couple way you can support us, and then, we support you with all great new features which can be. Thanks you for participating on this awesome software!
|
||||
|
||||
- [Buy me a Coffe](https://www.buymeacoffee.com/pepe)
|
||||
- [Become a Patreon](https://www.patreon.com/vuefilemanager)
|
||||
|
||||
321
_ide_helper.php
321
_ide_helper.php
@@ -3,7 +3,7 @@
|
||||
|
||||
/**
|
||||
* A helper file for Laravel, to provide autocomplete information to your IDE
|
||||
* Generated for Laravel 8.50.0.
|
||||
* Generated for Laravel 8.41.0.
|
||||
*
|
||||
* This file should not be included in your code, only analyzed by your IDE!
|
||||
*
|
||||
@@ -989,7 +989,6 @@
|
||||
* @param \Closure|string|null $concrete
|
||||
* @param bool $shared
|
||||
* @return void
|
||||
* @throws \TypeError
|
||||
* @static
|
||||
*/
|
||||
public static function bind($abstract, $concrete = null, $shared = false)
|
||||
@@ -1088,32 +1087,6 @@
|
||||
{ //Method inherited from \Illuminate\Container\Container
|
||||
/** @var \Illuminate\Foundation\Application $instance */
|
||||
$instance->singletonIf($abstract, $concrete);
|
||||
}
|
||||
/**
|
||||
* Register a scoped binding in the container.
|
||||
*
|
||||
* @param string $abstract
|
||||
* @param \Closure|string|null $concrete
|
||||
* @return void
|
||||
* @static
|
||||
*/
|
||||
public static function scoped($abstract, $concrete = null)
|
||||
{ //Method inherited from \Illuminate\Container\Container
|
||||
/** @var \Illuminate\Foundation\Application $instance */
|
||||
$instance->scoped($abstract, $concrete);
|
||||
}
|
||||
/**
|
||||
* Register a scoped binding if it hasn't already been registered.
|
||||
*
|
||||
* @param string $abstract
|
||||
* @param \Closure|string|null $concrete
|
||||
* @return void
|
||||
* @static
|
||||
*/
|
||||
public static function scopedIf($abstract, $concrete = null)
|
||||
{ //Method inherited from \Illuminate\Container\Container
|
||||
/** @var \Illuminate\Foundation\Application $instance */
|
||||
$instance->scopedIf($abstract, $concrete);
|
||||
}
|
||||
/**
|
||||
* "Extend" an abstract type in the container.
|
||||
@@ -1386,17 +1359,6 @@
|
||||
{ //Method inherited from \Illuminate\Container\Container
|
||||
/** @var \Illuminate\Foundation\Application $instance */
|
||||
$instance->forgetInstances();
|
||||
}
|
||||
/**
|
||||
* Clear all of the scoped instances from the container.
|
||||
*
|
||||
* @return void
|
||||
* @static
|
||||
*/
|
||||
public static function forgetScopedInstances()
|
||||
{ //Method inherited from \Illuminate\Container\Container
|
||||
/** @var \Illuminate\Foundation\Application $instance */
|
||||
$instance->forgetScopedInstances();
|
||||
}
|
||||
/**
|
||||
* Get the globally available instance of the container.
|
||||
@@ -1807,7 +1769,7 @@
|
||||
/**
|
||||
* Get the currently authenticated user.
|
||||
*
|
||||
* @return \App\Users\Models\User|null
|
||||
* @return \App\Models\User|null
|
||||
* @static
|
||||
*/
|
||||
public static function user()
|
||||
@@ -1842,7 +1804,7 @@
|
||||
* Log the given user ID into the application without sessions or cookies.
|
||||
*
|
||||
* @param mixed $id
|
||||
* @return \App\Users\Models\User|false
|
||||
* @return \App\Models\User|false
|
||||
* @static
|
||||
*/
|
||||
public static function onceUsingId($id)
|
||||
@@ -1920,7 +1882,7 @@
|
||||
*
|
||||
* @param mixed $id
|
||||
* @param bool $remember
|
||||
* @return \App\Users\Models\User|false
|
||||
* @return \App\Models\User|false
|
||||
* @static
|
||||
*/
|
||||
public static function loginUsingId($id, $remember = false)
|
||||
@@ -1972,7 +1934,7 @@
|
||||
*
|
||||
* @param string $password
|
||||
* @param string $attribute
|
||||
* @return \App\Users\Models\User|null
|
||||
* @return bool|null
|
||||
* @throws \Illuminate\Auth\AuthenticationException
|
||||
* @static
|
||||
*/
|
||||
@@ -1996,7 +1958,7 @@
|
||||
/**
|
||||
* Get the last user we attempted to authenticate.
|
||||
*
|
||||
* @return \App\Users\Models\User
|
||||
* @return \App\Models\User
|
||||
* @static
|
||||
*/
|
||||
public static function getLastAttempted()
|
||||
@@ -2098,7 +2060,7 @@
|
||||
/**
|
||||
* Return the currently cached user.
|
||||
*
|
||||
* @return \App\Users\Models\User|null
|
||||
* @return \App\Models\User|null
|
||||
* @static
|
||||
*/
|
||||
public static function getUser()
|
||||
@@ -2144,7 +2106,7 @@
|
||||
/**
|
||||
* Determine if the current user is authenticated. If not, throw an exception.
|
||||
*
|
||||
* @return \App\Users\Models\User
|
||||
* @return \App\Models\User
|
||||
* @throws \Illuminate\Auth\AuthenticationException
|
||||
* @static
|
||||
*/
|
||||
@@ -2625,19 +2587,6 @@
|
||||
{
|
||||
/** @var \Illuminate\View\Compilers\BladeCompiler $instance */
|
||||
return $instance->compileEndOnce();
|
||||
}
|
||||
/**
|
||||
* Add a handler to be executed before echoing a given class.
|
||||
*
|
||||
* @param string|callable $class
|
||||
* @param callable|null $handler
|
||||
* @return void
|
||||
* @static
|
||||
*/
|
||||
public static function stringable($class, $handler = null)
|
||||
{
|
||||
/** @var \Illuminate\View\Compilers\BladeCompiler $instance */
|
||||
$instance->stringable($class, $handler);
|
||||
}
|
||||
/**
|
||||
* Compile Blade echos into valid PHP.
|
||||
@@ -2650,18 +2599,6 @@
|
||||
{
|
||||
/** @var \Illuminate\View\Compilers\BladeCompiler $instance */
|
||||
return $instance->compileEchos($value);
|
||||
}
|
||||
/**
|
||||
* Apply the echo handler for the value if it exists.
|
||||
*
|
||||
* @param $value string
|
||||
* @return string
|
||||
* @static
|
||||
*/
|
||||
public static function applyEchoHandler($value)
|
||||
{
|
||||
/** @var \Illuminate\View\Compilers\BladeCompiler $instance */
|
||||
return $instance->applyEchoHandler($value);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2940,7 +2877,6 @@
|
||||
*
|
||||
* @param mixed $command
|
||||
* @return mixed
|
||||
* @throws \RuntimeException
|
||||
* @static
|
||||
*/
|
||||
public static function dispatchToQueue($command)
|
||||
@@ -3023,45 +2959,6 @@
|
||||
{
|
||||
/** @var \Illuminate\Support\Testing\Fakes\BusFake $instance */
|
||||
$instance->assertNotDispatched($command, $callback);
|
||||
}
|
||||
/**
|
||||
* Assert if a job was explicitly dispatched synchronously based on a truth-test callback.
|
||||
*
|
||||
* @param string|\Closure $command
|
||||
* @param callable|int|null $callback
|
||||
* @return void
|
||||
* @static
|
||||
*/
|
||||
public static function assertDispatchedSync($command, $callback = null)
|
||||
{
|
||||
/** @var \Illuminate\Support\Testing\Fakes\BusFake $instance */
|
||||
$instance->assertDispatchedSync($command, $callback);
|
||||
}
|
||||
/**
|
||||
* Assert if a job was pushed synchronously a number of times.
|
||||
*
|
||||
* @param string $command
|
||||
* @param int $times
|
||||
* @return void
|
||||
* @static
|
||||
*/
|
||||
public static function assertDispatchedSyncTimes($command, $times = 1)
|
||||
{
|
||||
/** @var \Illuminate\Support\Testing\Fakes\BusFake $instance */
|
||||
$instance->assertDispatchedSyncTimes($command, $times);
|
||||
}
|
||||
/**
|
||||
* Determine if a job was dispatched based on a truth-test callback.
|
||||
*
|
||||
* @param string|\Closure $command
|
||||
* @param callable|null $callback
|
||||
* @return void
|
||||
* @static
|
||||
*/
|
||||
public static function assertNotDispatchedSync($command, $callback = null)
|
||||
{
|
||||
/** @var \Illuminate\Support\Testing\Fakes\BusFake $instance */
|
||||
$instance->assertNotDispatchedSync($command, $callback);
|
||||
}
|
||||
/**
|
||||
* Assert if a job was dispatched after the response was sent based on a truth-test callback.
|
||||
@@ -3151,19 +3048,6 @@
|
||||
{
|
||||
/** @var \Illuminate\Support\Testing\Fakes\BusFake $instance */
|
||||
return $instance->dispatched($command, $callback);
|
||||
}
|
||||
/**
|
||||
* Get all of the jobs dispatched synchronously matching a truth-test callback.
|
||||
*
|
||||
* @param string $command
|
||||
* @param callable|null $callback
|
||||
* @return \Illuminate\Support\Collection
|
||||
* @static
|
||||
*/
|
||||
public static function dispatchedSync($command, $callback = null)
|
||||
{
|
||||
/** @var \Illuminate\Support\Testing\Fakes\BusFake $instance */
|
||||
return $instance->dispatchedSync($command, $callback);
|
||||
}
|
||||
/**
|
||||
* Get all of the jobs dispatched after the response was sent matching a truth-test callback.
|
||||
@@ -3209,18 +3093,6 @@
|
||||
* @return bool
|
||||
* @static
|
||||
*/
|
||||
public static function hasDispatchedSync($command)
|
||||
{
|
||||
/** @var \Illuminate\Support\Testing\Fakes\BusFake $instance */
|
||||
return $instance->hasDispatchedSync($command);
|
||||
}
|
||||
/**
|
||||
* Determine if there are any stored commands for a given class.
|
||||
*
|
||||
* @param string $command
|
||||
* @return bool
|
||||
* @static
|
||||
*/
|
||||
public static function hasDispatchedAfterResponse($command)
|
||||
{
|
||||
/** @var \Illuminate\Support\Testing\Fakes\BusFake $instance */
|
||||
@@ -4794,17 +4666,6 @@
|
||||
{ //Method inherited from \Illuminate\Database\Connection
|
||||
/** @var \Illuminate\Database\MySqlConnection $instance */
|
||||
return $instance->raw($value);
|
||||
}
|
||||
/**
|
||||
* Determine if the database connection has modified any database records.
|
||||
*
|
||||
* @return bool
|
||||
* @static
|
||||
*/
|
||||
public static function hasModifiedRecords()
|
||||
{ //Method inherited from \Illuminate\Database\Connection
|
||||
/** @var \Illuminate\Database\MySqlConnection $instance */
|
||||
return $instance->hasModifiedRecords();
|
||||
}
|
||||
/**
|
||||
* Indicate if any records have been modified.
|
||||
@@ -4817,18 +4678,6 @@
|
||||
{ //Method inherited from \Illuminate\Database\Connection
|
||||
/** @var \Illuminate\Database\MySqlConnection $instance */
|
||||
$instance->recordsHaveBeenModified($value);
|
||||
}
|
||||
/**
|
||||
* Set the record modification state.
|
||||
*
|
||||
* @param bool $value
|
||||
* @return \Illuminate\Database\MySqlConnection
|
||||
* @static
|
||||
*/
|
||||
public static function setRecordModificationState($value)
|
||||
{ //Method inherited from \Illuminate\Database\Connection
|
||||
/** @var \Illuminate\Database\MySqlConnection $instance */
|
||||
return $instance->setRecordModificationState($value);
|
||||
}
|
||||
/**
|
||||
* Reset the record modification state.
|
||||
@@ -4840,18 +4689,6 @@
|
||||
{ //Method inherited from \Illuminate\Database\Connection
|
||||
/** @var \Illuminate\Database\MySqlConnection $instance */
|
||||
$instance->forgetRecordModificationState();
|
||||
}
|
||||
/**
|
||||
* Indicate that the connection should use the write PDO connection for reads.
|
||||
*
|
||||
* @param bool $value
|
||||
* @return \Illuminate\Database\MySqlConnection
|
||||
* @static
|
||||
*/
|
||||
public static function useWriteConnectionWhenReading($value = true)
|
||||
{ //Method inherited from \Illuminate\Database\Connection
|
||||
/** @var \Illuminate\Database\MySqlConnection $instance */
|
||||
return $instance->useWriteConnectionWhenReading($value);
|
||||
}
|
||||
/**
|
||||
* Is Doctrine available?
|
||||
@@ -4977,17 +4814,6 @@
|
||||
{ //Method inherited from \Illuminate\Database\Connection
|
||||
/** @var \Illuminate\Database\MySqlConnection $instance */
|
||||
return $instance->getName();
|
||||
}
|
||||
/**
|
||||
* Get the database connection full name.
|
||||
*
|
||||
* @return string|null
|
||||
* @static
|
||||
*/
|
||||
public static function getNameWithReadWriteType()
|
||||
{ //Method inherited from \Illuminate\Database\Connection
|
||||
/** @var \Illuminate\Database\MySqlConnection $instance */
|
||||
return $instance->getNameWithReadWriteType();
|
||||
}
|
||||
/**
|
||||
* Get an option from the configuration options.
|
||||
@@ -5226,18 +5052,6 @@
|
||||
{ //Method inherited from \Illuminate\Database\Connection
|
||||
/** @var \Illuminate\Database\MySqlConnection $instance */
|
||||
return $instance->setDatabaseName($database);
|
||||
}
|
||||
/**
|
||||
* Set the read / write type of the connection.
|
||||
*
|
||||
* @param string|null $readWriteType
|
||||
* @return \Illuminate\Database\MySqlConnection
|
||||
* @static
|
||||
*/
|
||||
public static function setReadWriteType($readWriteType)
|
||||
{ //Method inherited from \Illuminate\Database\Connection
|
||||
/** @var \Illuminate\Database\MySqlConnection $instance */
|
||||
return $instance->setReadWriteType($readWriteType);
|
||||
}
|
||||
/**
|
||||
* Get the table prefix for the connection.
|
||||
@@ -5364,7 +5178,6 @@
|
||||
*
|
||||
* @param callable $callback
|
||||
* @return void
|
||||
* @throws \RuntimeException
|
||||
* @static
|
||||
*/
|
||||
public static function afterCommit($callback)
|
||||
@@ -5756,7 +5569,6 @@
|
||||
* @param string $path
|
||||
* @param array $data
|
||||
* @return mixed
|
||||
* @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
|
||||
* @static
|
||||
*/
|
||||
public static function requireOnce($path, $data = [])
|
||||
@@ -5912,7 +5724,6 @@
|
||||
* @param string $target
|
||||
* @param string $link
|
||||
* @return void
|
||||
* @throws \RuntimeException
|
||||
* @static
|
||||
*/
|
||||
public static function relativeLink($target, $link)
|
||||
@@ -5973,7 +5784,6 @@
|
||||
*
|
||||
* @param string $path
|
||||
* @return string|null
|
||||
* @throws \RuntimeException
|
||||
* @static
|
||||
*/
|
||||
public static function guessExtension($path)
|
||||
@@ -6900,7 +6710,6 @@
|
||||
*
|
||||
* @param string $locale
|
||||
* @return void
|
||||
* @throws \InvalidArgumentException
|
||||
* @static
|
||||
*/
|
||||
public static function setLocale($locale)
|
||||
@@ -6997,8 +6806,6 @@
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @method static \Illuminate\Log\Logger withContext(array $context = [])
|
||||
* @method static \Illuminate\Log\Logger withoutContext()
|
||||
* @method static void write(string $level, string $message, array $context = [])
|
||||
* @method static void listen(\Closure $callback)
|
||||
* @see \Illuminate\Log\Logger
|
||||
@@ -7271,7 +7078,6 @@
|
||||
*
|
||||
* @param array $config
|
||||
* @return \Swift_Transport
|
||||
* @throws \InvalidArgumentException
|
||||
* @static
|
||||
*/
|
||||
public static function createTransport($config)
|
||||
@@ -12054,7 +11860,6 @@
|
||||
*
|
||||
* @param string $type
|
||||
* @return void
|
||||
* @throws \InvalidArgumentException
|
||||
* @static
|
||||
*/
|
||||
public static function defaultMorphKeyType($type)
|
||||
@@ -12971,18 +12776,6 @@
|
||||
{
|
||||
/** @var \Illuminate\Filesystem\FilesystemManager $instance */
|
||||
return $instance->cloud();
|
||||
}
|
||||
/**
|
||||
* Build an on-demand disk.
|
||||
*
|
||||
* @param string|array $config
|
||||
* @return \Illuminate\Filesystem\FilesystemAdapter
|
||||
* @static
|
||||
*/
|
||||
public static function build($config)
|
||||
{
|
||||
/** @var \Illuminate\Filesystem\FilesystemManager $instance */
|
||||
return $instance->build($config);
|
||||
}
|
||||
/**
|
||||
* Create an instance of the local driver.
|
||||
@@ -14126,17 +13919,6 @@
|
||||
{
|
||||
/** @var \Illuminate\Validation\Factory $instance */
|
||||
$instance->replacer($rule, $replacer);
|
||||
}
|
||||
/**
|
||||
* Indicate that unvalidated array keys should be excluded, even if the parent array was validated.
|
||||
*
|
||||
* @return void
|
||||
* @static
|
||||
*/
|
||||
public static function excludeUnvalidatedArrayKeys()
|
||||
{
|
||||
/** @var \Illuminate\Validation\Factory $instance */
|
||||
$instance->excludeUnvalidatedArrayKeys();
|
||||
}
|
||||
/**
|
||||
* Set the Validator instance resolver.
|
||||
@@ -14675,7 +14457,6 @@
|
||||
* @param string $name
|
||||
* @param string|null $content
|
||||
* @return void
|
||||
* @throws \InvalidArgumentException
|
||||
* @static
|
||||
*/
|
||||
public static function slot($name, $content = null)
|
||||
@@ -16305,7 +16086,7 @@ namespace {
|
||||
* @param mixed $operator
|
||||
* @param mixed $value
|
||||
* @param string $boolean
|
||||
* @return \Illuminate\Database\Eloquent\Model|static|null
|
||||
* @return \Illuminate\Database\Eloquent\Model|static
|
||||
* @static
|
||||
*/
|
||||
public static function firstWhere($column, $operator = null, $value = null, $boolean = 'and')
|
||||
@@ -16642,7 +16423,8 @@ namespace {
|
||||
* @param array $columns
|
||||
* @param string $cursorName
|
||||
* @param string|null $cursor
|
||||
* @return \Illuminate\Contracts\Pagination\CursorPaginator
|
||||
* @return \Illuminate\Contracts\Pagination\Paginator
|
||||
* @throws \Illuminate\Pagination\CursorPaginationException
|
||||
* @static
|
||||
*/
|
||||
public static function cursorPaginate($perPage = null, $columns = [], $cursorName = 'cursor', $cursor = null)
|
||||
@@ -17264,19 +17046,6 @@ namespace {
|
||||
return $instance->withAvg($relation, $column);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add subselect queries to include the existence of related models.
|
||||
*
|
||||
* @param string|array $relation
|
||||
* @return \Illuminate\Database\Eloquent\Builder|static
|
||||
* @static
|
||||
*/
|
||||
public static function withExists($relation)
|
||||
{
|
||||
/** @var \Illuminate\Database\Eloquent\Builder $instance */
|
||||
return $instance->withExists($relation);
|
||||
}
|
||||
|
||||
/**
|
||||
* Merge the where constraints from another query to the current query.
|
||||
*
|
||||
@@ -17336,7 +17105,6 @@ namespace {
|
||||
* @param callable $callback
|
||||
* @param int $count
|
||||
* @return bool
|
||||
* @throws \RuntimeException
|
||||
* @static
|
||||
*/
|
||||
public static function each($callback, $count = 1000)
|
||||
@@ -17382,7 +17150,6 @@ namespace {
|
||||
*
|
||||
* @param int $chunkSize
|
||||
* @return \Illuminate\Support\LazyCollection
|
||||
* @throws \InvalidArgumentException
|
||||
* @static
|
||||
*/
|
||||
public static function lazy($chunkSize = 1000)
|
||||
@@ -17398,7 +17165,6 @@ namespace {
|
||||
* @param string|null $column
|
||||
* @param string|null $alias
|
||||
* @return \Illuminate\Support\LazyCollection
|
||||
* @throws \InvalidArgumentException
|
||||
* @static
|
||||
*/
|
||||
public static function lazyById($chunkSize = 1000, $column = null, $alias = null)
|
||||
@@ -17435,6 +17201,21 @@ namespace {
|
||||
return $instance->baseSole($columns);
|
||||
}
|
||||
|
||||
/**
|
||||
* Apply the callback's query changes if the given "value" is true.
|
||||
*
|
||||
* @param mixed $value
|
||||
* @param callable $callback
|
||||
* @param callable|null $default
|
||||
* @return mixed|$this
|
||||
* @static
|
||||
*/
|
||||
public static function when($value, $callback, $default = null)
|
||||
{
|
||||
/** @var \Illuminate\Database\Eloquent\Builder $instance */
|
||||
return $instance->when($value, $callback, $default);
|
||||
}
|
||||
|
||||
/**
|
||||
* Pass the query to a given callback.
|
||||
*
|
||||
@@ -17449,27 +17230,12 @@ namespace {
|
||||
}
|
||||
|
||||
/**
|
||||
* Apply the callback if the given "value" is truthy.
|
||||
* Apply the callback's query changes if the given "value" is false.
|
||||
*
|
||||
* @param mixed $value
|
||||
* @param callable $callback
|
||||
* @param callable|null $default
|
||||
* @return mixed
|
||||
* @static
|
||||
*/
|
||||
public static function when($value, $callback, $default = null)
|
||||
{
|
||||
/** @var \Illuminate\Database\Eloquent\Builder $instance */
|
||||
return $instance->when($value, $callback, $default);
|
||||
}
|
||||
|
||||
/**
|
||||
* Apply the callback if the given "value" is falsy.
|
||||
*
|
||||
* @param mixed $value
|
||||
* @param callable $callback
|
||||
* @param callable|null $default
|
||||
* @return mixed
|
||||
* @return mixed|$this
|
||||
* @static
|
||||
*/
|
||||
public static function unless($value, $callback, $default = null)
|
||||
@@ -17997,7 +17763,7 @@ namespace {
|
||||
/**
|
||||
* Add an "or where null" clause to the query.
|
||||
*
|
||||
* @param string|array $column
|
||||
* @param string $column
|
||||
* @return \Illuminate\Database\Query\Builder
|
||||
* @static
|
||||
*/
|
||||
@@ -18675,7 +18441,7 @@ namespace {
|
||||
/**
|
||||
* Add a descending "order by" clause to the query.
|
||||
*
|
||||
* @param \Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Query\Expression|string $column
|
||||
* @param string $column
|
||||
* @return \Illuminate\Database\Query\Builder
|
||||
* @static
|
||||
*/
|
||||
@@ -18811,7 +18577,7 @@ namespace {
|
||||
/**
|
||||
* Remove all existing orders and optionally add a new order.
|
||||
*
|
||||
* @param \Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Query\Expression|string|null $column
|
||||
* @param string|null $column
|
||||
* @param string $direction
|
||||
* @return \Illuminate\Database\Query\Builder
|
||||
* @static
|
||||
@@ -18886,31 +18652,6 @@ namespace {
|
||||
return $instance->sharedLock();
|
||||
}
|
||||
|
||||
/**
|
||||
* Register a closure to be invoked before the query is executed.
|
||||
*
|
||||
* @param callable $callback
|
||||
* @return \Illuminate\Database\Query\Builder
|
||||
* @static
|
||||
*/
|
||||
public static function beforeQuery($callback)
|
||||
{
|
||||
/** @var \Illuminate\Database\Query\Builder $instance */
|
||||
return $instance->beforeQuery($callback);
|
||||
}
|
||||
|
||||
/**
|
||||
* Invoke the "before query" modification callbacks.
|
||||
*
|
||||
* @return void
|
||||
* @static
|
||||
*/
|
||||
public static function applyBeforeQueryCallbacks()
|
||||
{
|
||||
/** @var \Illuminate\Database\Query\Builder $instance */
|
||||
$instance->applyBeforeQueryCallbacks();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the SQL representation of the query.
|
||||
*
|
||||
|
||||
61
app/Actions/Fortify/CreateNewUser.php
Normal file
61
app/Actions/Fortify/CreateNewUser.php
Normal file
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
namespace App\Actions\Fortify;
|
||||
|
||||
use App\Models\User;
|
||||
use App\Models\Setting;
|
||||
use App\Models\UserSettings;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Laravel\Fortify\Contracts\CreatesNewUsers;
|
||||
|
||||
class CreateNewUser implements CreatesNewUsers
|
||||
{
|
||||
use PasswordValidationRules;
|
||||
|
||||
/**
|
||||
* Validate and create a newly registered user.
|
||||
*
|
||||
* @param array $input
|
||||
* @return \App\Models\User
|
||||
*/
|
||||
public function create(array $input)
|
||||
{
|
||||
$settings = Setting::whereIn('name', ['storage_default', 'registration'])
|
||||
->pluck('value', 'name');
|
||||
|
||||
// Check if account registration is enabled
|
||||
if (! intval($settings['registration'])) {
|
||||
abort(401);
|
||||
}
|
||||
|
||||
Validator::make($input, [
|
||||
'name' => ['required', 'string', 'max:255'],
|
||||
'email' => [
|
||||
'required',
|
||||
'string',
|
||||
'email',
|
||||
'max:255',
|
||||
Rule::unique(User::class),
|
||||
],
|
||||
'password' => $this->passwordRules(),
|
||||
])->validate();
|
||||
|
||||
$user = User::create([
|
||||
'email' => $input['email'],
|
||||
'password' => bcrypt($input['password']),
|
||||
]);
|
||||
|
||||
UserSettings::unguard();
|
||||
|
||||
$user
|
||||
->settings()
|
||||
->create([
|
||||
'name' => $input['name'],
|
||||
'storage_capacity' => $settings['storage_default'],
|
||||
]);
|
||||
|
||||
UserSettings::reguard();
|
||||
|
||||
return $user;
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace App\Users\Rules;
|
||||
namespace App\Actions\Fortify;
|
||||
|
||||
use Laravel\Fortify\Rules\Password;
|
||||
|
||||
@@ -7,8 +7,10 @@ trait PasswordValidationRules
|
||||
{
|
||||
/**
|
||||
* Get the validation rules used to validate passwords.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function passwordRules(): array
|
||||
protected function passwordRules()
|
||||
{
|
||||
return ['required', 'string', new Password, 'confirmed'];
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace App\Users\Actions;
|
||||
namespace App\Actions\Fortify;
|
||||
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Laravel\Fortify\Contracts\ResetsUserPasswords;
|
||||
@@ -1,9 +1,8 @@
|
||||
<?php
|
||||
namespace App\Users\Actions;
|
||||
namespace App\Actions\Fortify;
|
||||
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use App\Users\Rules\PasswordValidationRules;
|
||||
use Laravel\Fortify\Contracts\UpdatesUserPasswords;
|
||||
|
||||
class UpdateUserPassword implements UpdatesUserPasswords
|
||||
@@ -25,7 +24,7 @@ class UpdateUserPassword implements UpdatesUserPasswords
|
||||
'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', __t('password_doesnt_match'));
|
||||
$validator->errors()->add('current_password', __('The provided password does not match your current password.'));
|
||||
}
|
||||
})->validateWithBag('updatePassword');
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace App\Users\Actions;
|
||||
namespace App\Actions\Fortify;
|
||||
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
889
app/Console/Commands/SetupDevEnvironment.php
Normal file
889
app/Console/Commands/SetupDevEnvironment.php
Normal file
@@ -0,0 +1,889 @@
|
||||
<?php
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use App\Models\File;
|
||||
use App\Models\User;
|
||||
use App\Models\Share;
|
||||
use App\Models\Folder;
|
||||
use App\Models\Setting;
|
||||
use Illuminate\Support\Str;
|
||||
use App\Services\SetupService;
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Illuminate\Foundation\Testing\WithFaker;
|
||||
|
||||
class SetupDevEnvironment extends Command
|
||||
{
|
||||
use WithFaker;
|
||||
|
||||
/**
|
||||
* The name and signature of the console command.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $signature = 'setup:dev';
|
||||
protected $license = 'Extended';
|
||||
|
||||
/**
|
||||
* The console command description.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $description = 'Set up development environment with demo data';
|
||||
|
||||
private $setup;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->setUpFaker();
|
||||
$this->setup = resolve(SetupService::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the console command.
|
||||
* return @void
|
||||
*/
|
||||
public function handle(): void
|
||||
{
|
||||
$this->info('Setting up development environment');
|
||||
|
||||
$this->info('Creating system directories...');
|
||||
$this->setup->create_directories();
|
||||
|
||||
$this->info('Migrating Databases...');
|
||||
$this->migrate_and_generate();
|
||||
|
||||
$this->info('Storing default settings and content...');
|
||||
$this->store_default_settings();
|
||||
$this->setup->seed_default_pages();
|
||||
$this->setup->seed_default_settings($this->license);
|
||||
$this->setup->seed_default_language();
|
||||
|
||||
$this->info('Creating default admin...');
|
||||
$this->create_admin();
|
||||
|
||||
$this->info('Creating demo users...');
|
||||
$this->create_demo_users();
|
||||
|
||||
$this->info('Creating default admin content...');
|
||||
$this->create_admin_default_content();
|
||||
$this->create_share_records();
|
||||
|
||||
$this->info('Clearing application cache...');
|
||||
$this->clear_cache();
|
||||
|
||||
$this->info('Dispatching jobs...');
|
||||
$this->call('queue:work', [
|
||||
'--stop-when-empty' => true,
|
||||
]);
|
||||
|
||||
$this->info('Everything is done, congratulations! 🥳🥳🥳');
|
||||
}
|
||||
|
||||
/**
|
||||
* Create default admin account
|
||||
*/
|
||||
private function create_admin(): void
|
||||
{
|
||||
$user = User::forceCreate([
|
||||
'role' => 'admin',
|
||||
'email' => 'howdy@hi5ve.digital',
|
||||
'password' => bcrypt('vuefilemanager'),
|
||||
]);
|
||||
|
||||
$user
|
||||
->settings()
|
||||
->create([
|
||||
'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']),
|
||||
]);
|
||||
|
||||
Storage::putFileAs('avatars', storage_path('demo/avatars/avatar-01.png'), 'avatar-01.png', 'private');
|
||||
|
||||
// Show user credentials
|
||||
$this->info('Default admin account created. Email: howdy@hi5ve.digital and Password: vuefilemanager');
|
||||
}
|
||||
|
||||
/**
|
||||
* Create default admin account
|
||||
*/
|
||||
private function create_demo_users(): void
|
||||
{
|
||||
collect([
|
||||
[
|
||||
'avatar' => 'avatar-02.png',
|
||||
],
|
||||
[
|
||||
'avatar' => 'avatar-03.png',
|
||||
],
|
||||
])->each(function ($user) {
|
||||
$newbie = User::forceCreate([
|
||||
'role' => 'user',
|
||||
'email' => $this->faker->email,
|
||||
'password' => bcrypt('vuefilemanager'),
|
||||
]);
|
||||
|
||||
$newbie
|
||||
->settings()
|
||||
->create([
|
||||
'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']),
|
||||
]);
|
||||
|
||||
Storage::putFileAs('avatars', storage_path("demo/avatars/{$user['avatar']}"), $user['avatar'], 'private');
|
||||
|
||||
$this->info("Generated user with email: $newbie->email and Password: vuefilemanager");
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Create default admin content
|
||||
*/
|
||||
private function create_admin_default_content(): void
|
||||
{
|
||||
$user = User::whereEmail('howdy@hi5ve.digital')
|
||||
->first();
|
||||
|
||||
// 1.
|
||||
$shared_folder = Folder::factory(Folder::class)
|
||||
->create([
|
||||
'user_id' => $user->id,
|
||||
'author' => 'user',
|
||||
'name' => 'Shared Folder',
|
||||
'emoji' => [
|
||||
'codes' => '1F680',
|
||||
'char' => '🚀',
|
||||
'name' => 'rocket',
|
||||
'category' => 'Travel & Places (transport-air)',
|
||||
'group' => 'Travel & Places',
|
||||
'subgroup' => 'transport-air',
|
||||
],
|
||||
'created_at' => now(),
|
||||
]);
|
||||
|
||||
Share::factory(Share::class)
|
||||
->create([
|
||||
'type' => 'folder',
|
||||
'item_id' => $shared_folder->id,
|
||||
'user_id' => $user->id,
|
||||
'permission' => 'editor',
|
||||
'is_protected' => false,
|
||||
'password' => null,
|
||||
'expire_in' => null,
|
||||
]);
|
||||
|
||||
$peters_files = Folder::factory(Folder::class)
|
||||
->create([
|
||||
'user_id' => $user->id,
|
||||
'parent_id' => $shared_folder->id,
|
||||
'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',
|
||||
'category' => 'Objects (light & video)',
|
||||
'group' => 'Objects',
|
||||
'subgroup' => 'light & video',
|
||||
],
|
||||
'created_at' => now()->subMinutes(1),
|
||||
]);
|
||||
|
||||
$nature = Folder::factory(Folder::class)
|
||||
->create([
|
||||
'user_id' => $user->id,
|
||||
'parent_id' => $random_pics->id,
|
||||
'author' => 'user',
|
||||
'name' => 'Nature',
|
||||
'emoji' => [
|
||||
'codes' => '26F0',
|
||||
'char' => '⛰',
|
||||
'name' => 'mountain',
|
||||
'category' => 'Travel & Places (place-geographic)',
|
||||
'group' => 'Travel & Places',
|
||||
'subgroup' => 'place-geographic',
|
||||
],
|
||||
]);
|
||||
|
||||
$apartments = Folder::factory(Folder::class)
|
||||
->create([
|
||||
'user_id' => $user->id,
|
||||
'parent_id' => $random_pics->id,
|
||||
'author' => 'user',
|
||||
'name' => 'Apartments',
|
||||
'emoji' => [
|
||||
'codes' => '1F3E0',
|
||||
'char' => '🏠',
|
||||
'name' => 'house',
|
||||
'category' => 'Travel & Places (place-building)',
|
||||
'group' => 'Travel & Places',
|
||||
'subgroup' => 'place-building',
|
||||
],
|
||||
]);
|
||||
|
||||
// 3.
|
||||
$playable_media = Folder::factory(Folder::class)
|
||||
->create([
|
||||
'user_id' => $user->id,
|
||||
'author' => 'user',
|
||||
'name' => 'Playable Media',
|
||||
'created_at' => now()->subMinutes(2),
|
||||
]);
|
||||
|
||||
$video = Folder::factory(Folder::class)
|
||||
->create([
|
||||
'user_id' => $user->id,
|
||||
'parent_id' => $playable_media->id,
|
||||
'author' => 'user',
|
||||
'name' => 'Video',
|
||||
]);
|
||||
|
||||
$audio = Folder::factory(Folder::class)
|
||||
->create([
|
||||
'user_id' => $user->id,
|
||||
'parent_id' => $playable_media->id,
|
||||
'author' => 'user',
|
||||
'name' => 'Audio',
|
||||
]);
|
||||
|
||||
// 4.
|
||||
$multi_level = Folder::factory(Folder::class)
|
||||
->create([
|
||||
'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,
|
||||
'parent_id' => $multi_level->id,
|
||||
'author' => 'user',
|
||||
'name' => 'First Level',
|
||||
]);
|
||||
|
||||
$second_level = Folder::factory(Folder::class)
|
||||
->create([
|
||||
'user_id' => $user->id,
|
||||
'parent_id' => $first_level->id,
|
||||
'author' => 'user',
|
||||
'name' => 'Second Level',
|
||||
]);
|
||||
|
||||
$third_level = Folder::factory(Folder::class)
|
||||
->create([
|
||||
'user_id' => $user->id,
|
||||
'parent_id' => $second_level->id,
|
||||
'author' => 'user',
|
||||
'name' => 'Third Level',
|
||||
]);
|
||||
|
||||
// 5.
|
||||
$documents = Folder::factory(Folder::class)
|
||||
->create([
|
||||
'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',
|
||||
'is_protected' => false,
|
||||
'password' => null,
|
||||
'expire_in' => null,
|
||||
]);
|
||||
|
||||
// 6.
|
||||
$videohive = Folder::factory(Folder::class)
|
||||
->create([
|
||||
'user_id' => $user->id,
|
||||
'author' => 'user',
|
||||
'name' => 'Videohive by MakingCG',
|
||||
'created_at' => now()->subMinutes(5),
|
||||
]);
|
||||
|
||||
$user
|
||||
->favouriteFolders()
|
||||
->sync([
|
||||
$shared_folder->id,
|
||||
$random_pics->id,
|
||||
$documents->id,
|
||||
$peters_files->id,
|
||||
]);
|
||||
|
||||
// Get documents to root directory
|
||||
collect([
|
||||
[
|
||||
'name' => 'Random Document',
|
||||
'basename' => 'Licence.pdf',
|
||||
'mimetype' => 'pdf',
|
||||
],
|
||||
[
|
||||
'name' => 'School Report',
|
||||
'basename' => 'Project Notes.pdf',
|
||||
'mimetype' => 'pdf',
|
||||
],
|
||||
[
|
||||
'name' => 'Personal Savings',
|
||||
'basename' => 'School Report.pages',
|
||||
'mimetype' => 'pages',
|
||||
],
|
||||
[
|
||||
'name' => 'Top Secret Files',
|
||||
'basename' => 'Stories of the Night Skies.pages',
|
||||
'mimetype' => 'pages',
|
||||
],
|
||||
])
|
||||
->each(function ($file) use ($user) {
|
||||
$basename = Str::random(12) . '-' . $file['basename'];
|
||||
|
||||
// Copy file into app storage
|
||||
Storage::putFileAs("files/$user->id", storage_path("demo/documents/{$file['basename']}"), $basename, 'private');
|
||||
|
||||
// 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),
|
||||
'created_at' => now()->subMinutes(rand(1, 5)),
|
||||
]);
|
||||
});
|
||||
|
||||
// Get documents to documents folder
|
||||
collect([
|
||||
[
|
||||
'name' => 'Home Improvement',
|
||||
'basename' => 'Licence.pdf',
|
||||
'mimetype' => 'pdf',
|
||||
],
|
||||
[
|
||||
'name' => 'Project Notes',
|
||||
'basename' => 'Project Notes.pdf',
|
||||
'mimetype' => 'pdf',
|
||||
],
|
||||
[
|
||||
'name' => 'Personal Savings',
|
||||
'basename' => 'School Report.pages',
|
||||
'mimetype' => 'pages',
|
||||
],
|
||||
[
|
||||
'name' => 'License',
|
||||
'basename' => 'Stories of the Night Skies.pages',
|
||||
'mimetype' => 'pages',
|
||||
],
|
||||
])
|
||||
->each(function ($file) use ($user, $documents) {
|
||||
$basename = Str::random(12) . '-' . $file['basename'];
|
||||
|
||||
// Copy file into app storage
|
||||
Storage::putFileAs("files/$user->id", storage_path("demo/documents/{$file['basename']}"), $basename, 'private');
|
||||
|
||||
// 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),
|
||||
'created_at' => now()->subMinutes(rand(1, 5)),
|
||||
]);
|
||||
});
|
||||
|
||||
// Get documents to shared folder
|
||||
collect([
|
||||
[
|
||||
'name' => 'Home plan',
|
||||
'basename' => 'Licence.pdf',
|
||||
'mimetype' => 'pdf',
|
||||
],
|
||||
[
|
||||
'name' => 'Software Licence',
|
||||
'basename' => 'Project Notes.pdf',
|
||||
'mimetype' => 'pdf',
|
||||
],
|
||||
])
|
||||
->each(function ($file) use ($user, $shared_folder) {
|
||||
$basename = Str::random(12) . '-' . $file['basename'];
|
||||
|
||||
// Copy file into app storage
|
||||
Storage::putFileAs("files/$user->id", storage_path("demo/documents/{$file['basename']}"), $basename, 'private');
|
||||
|
||||
// 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),
|
||||
'created_at' => now()->subMinutes(rand(1, 5)),
|
||||
]);
|
||||
});
|
||||
|
||||
// Get documents to peter's files folder
|
||||
collect([
|
||||
[
|
||||
'name' => 'Project Backup',
|
||||
'basename' => 'Licence.pdf',
|
||||
'mimetype' => 'pdf',
|
||||
],
|
||||
[
|
||||
'name' => 'Yearly report',
|
||||
'basename' => 'Project Notes.pdf',
|
||||
'mimetype' => 'pdf',
|
||||
],
|
||||
[
|
||||
'name' => 'Work Update',
|
||||
'basename' => 'School Report.pages',
|
||||
'mimetype' => 'pages',
|
||||
],
|
||||
[
|
||||
'name' => 'Person Writing on Notebook',
|
||||
'basename' => 'Stories of the Night Skies.pages',
|
||||
'mimetype' => 'pages',
|
||||
],
|
||||
[
|
||||
'name' => 'Blank Business Composition Computer',
|
||||
'basename' => 'Licence.pdf',
|
||||
'mimetype' => 'pdf',
|
||||
],
|
||||
[
|
||||
'name' => '2020 April - Export',
|
||||
'basename' => 'Project Notes.pdf',
|
||||
'mimetype' => 'pdf',
|
||||
],
|
||||
[
|
||||
'name' => 'Ballpen Blur Close Up Computer',
|
||||
'basename' => 'School Report.pages',
|
||||
'mimetype' => 'pages',
|
||||
],
|
||||
])
|
||||
->each(function ($file) use ($user, $peters_files) {
|
||||
$basename = Str::random(12) . '-' . $file['basename'];
|
||||
|
||||
// Copy file into app storage
|
||||
Storage::putFileAs("files/$user->id", storage_path("demo/documents/{$file['basename']}"), $basename, 'private');
|
||||
|
||||
// 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),
|
||||
'created_at' => now()->subMinutes(rand(1, 5)),
|
||||
]);
|
||||
});
|
||||
|
||||
// Get videos
|
||||
collect([
|
||||
'Apple Watch App Video Promotion.mp4',
|
||||
'Professional 3D Device Pack for Element 3D.mp4',
|
||||
'Smart Watch 3D Device Pack for Element 3D.mp4',
|
||||
'Sphere Bound 3D Titles.mp4',
|
||||
])
|
||||
->each(function ($file) use ($user, $videohive) {
|
||||
$basename = Str::random(12) . '-' . $file;
|
||||
|
||||
// Copy file into app storage
|
||||
Storage::putFileAs("files/$user->id", storage_path("demo/video/$file"), $basename, 'private');
|
||||
|
||||
// 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),
|
||||
'created_at' => now()->subMinutes(rand(1, 5)),
|
||||
]);
|
||||
});
|
||||
|
||||
// Get video into video folder
|
||||
collect([
|
||||
'Apple Watch App Video Promotion.mp4',
|
||||
])
|
||||
->each(function ($file) use ($user, $video) {
|
||||
$basename = Str::random(12) . '-' . $file;
|
||||
|
||||
// Copy file into app storage
|
||||
Storage::putFileAs("files/$user->id", storage_path("demo/video/$file"), $basename, 'private');
|
||||
|
||||
// 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),
|
||||
'created_at' => now()->subMinutes(rand(1, 5)),
|
||||
]);
|
||||
});
|
||||
|
||||
// Get audios
|
||||
collect([
|
||||
'D-Block & S-te-Fan - Bla Bla.mp3',
|
||||
])
|
||||
->each(function ($file) use ($user, $audio) {
|
||||
$basename = Str::random(12) . '-' . $file;
|
||||
|
||||
// Copy file into app storage
|
||||
Storage::putFileAs("files/$user->id", storage_path("demo/audio/$file"), $basename, 'private');
|
||||
|
||||
// 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),
|
||||
'created_at' => now()->subMinutes(rand(1, 5)),
|
||||
]);
|
||||
});
|
||||
|
||||
// Get meme gallery
|
||||
collect([
|
||||
'Eggcited bro.jpg',
|
||||
'Get a Rest.jpg',
|
||||
'Get Your Shit Together.jpg',
|
||||
'Happiness is when you are right beside me.jpg',
|
||||
'Have a Nice Day.jpg',
|
||||
'It Works On My Machine.jpg',
|
||||
'I am Just Trying to shine.jpg',
|
||||
'It Works On My Machine.jpg',
|
||||
'Missing you It is Pig Time.jpg',
|
||||
'Sofishticated.jpg',
|
||||
'whaaaaat.jpg',
|
||||
'You Are My Sunshine.jpg',
|
||||
])
|
||||
->each(function ($file) use ($user) {
|
||||
$basename = Str::random(12) . '-' . $file;
|
||||
|
||||
// Copy file into app storage
|
||||
Storage::putFileAs("files/$user->id", storage_path("demo/images/memes/$file"), $basename, 'private');
|
||||
Storage::putFileAs("files/$user->id", storage_path("demo/images/memes/thumbnail-$file"), "thumbnail-$basename", 'private');
|
||||
|
||||
// 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",
|
||||
'created_at' => now()->subMinutes(rand(1, 5)),
|
||||
]);
|
||||
});
|
||||
|
||||
// Get apartments gallery
|
||||
collect([
|
||||
'Apartment Architecture Ceiling Chairs.jpg',
|
||||
'Apartment Chair.jpg',
|
||||
'Apartment Contemporary Couch Curtains.jpg',
|
||||
'Brown Wooden Center Table.jpg',
|
||||
'Home.jpg',
|
||||
'Kitchen Appliances.jpg',
|
||||
'Kitchen Island.jpg',
|
||||
])
|
||||
->each(function ($file) use ($user, $apartments) {
|
||||
$basename = Str::random(12) . '-' . $file;
|
||||
|
||||
// Copy file into app storage
|
||||
Storage::putFileAs("files/$user->id", storage_path("demo/images/apartments/$file"), $basename, 'private');
|
||||
Storage::putFileAs("files/$user->id", storage_path("demo/images/apartments/thumbnail-$file"), "thumbnail-$basename", 'private');
|
||||
|
||||
// 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",
|
||||
'created_at' => now()->subMinutes(rand(1, 5)),
|
||||
]);
|
||||
});
|
||||
|
||||
// Get nature gallery
|
||||
collect([
|
||||
'Bird Patterncolorful Green.jpg',
|
||||
'Close Up Of Peacock.jpg',
|
||||
'Close Up Photography Of Tiger.jpg',
|
||||
'Cold Nature Cute Ice.jpg',
|
||||
'Landscape Photo of Forest.jpg',
|
||||
'Photo of Hawksbill Sea Turtle.jpg',
|
||||
'Photo Of Reindeer in The Snow.jpg',
|
||||
'View Of Elephant in Water.jpg',
|
||||
'Waterfall Between Trees.jpg',
|
||||
'Wildlife Photography of Elephant During Golden Hour.jpg',
|
||||
'Yellow Animal Eyes Fur.jpg',
|
||||
])
|
||||
->each(function ($file) use ($user, $nature) {
|
||||
$basename = Str::random(12) . '-' . $file;
|
||||
|
||||
// Copy file into app storage
|
||||
Storage::putFileAs("files/$user->id", storage_path("demo/images/nature/$file"), $basename, 'private');
|
||||
Storage::putFileAs("files/$user->id", storage_path("demo/images/nature/thumbnail-$file"), "thumbnail-$basename", 'private');
|
||||
|
||||
// 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",
|
||||
'created_at' => now()->subMinutes(rand(1, 5)),
|
||||
]);
|
||||
});
|
||||
}
|
||||
|
||||
private function create_share_records(): void
|
||||
{
|
||||
$user = User::whereEmail('howdy@hi5ve.digital')
|
||||
->first();
|
||||
|
||||
$images = File::whereType('image')
|
||||
->whereFolderId(null)
|
||||
->take(3)
|
||||
->pluck('id');
|
||||
|
||||
$images->each(function ($id) use ($user) {
|
||||
Share::create([
|
||||
'user_id' => $user->id,
|
||||
'item_id' => $id,
|
||||
'type' => 'file',
|
||||
'is_protected' => false,
|
||||
'permission' => 'editor',
|
||||
'password' => null,
|
||||
'expire_in' => null,
|
||||
]);
|
||||
});
|
||||
|
||||
$files = File::whereType('file')
|
||||
->whereFolderId(null)
|
||||
->take(2)
|
||||
->pluck('id');
|
||||
|
||||
$files->each(function ($id) use ($user) {
|
||||
Share::create([
|
||||
'user_id' => $user->id,
|
||||
'item_id' => $id,
|
||||
'type' => 'file',
|
||||
'is_protected' => false,
|
||||
'permission' => 'editor',
|
||||
'password' => null,
|
||||
'expire_in' => null,
|
||||
]);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Store main app settings into database
|
||||
*/
|
||||
private function store_default_settings(): void
|
||||
{
|
||||
// Get options
|
||||
collect([
|
||||
[
|
||||
'name' => 'setup_wizard_database',
|
||||
'value' => 1,
|
||||
],
|
||||
[
|
||||
'name' => 'app_title',
|
||||
'value' => 'VueFileManager',
|
||||
],
|
||||
[
|
||||
'name' => 'app_description',
|
||||
'value' => 'Your self-hosted storage cloud software powered by Laravel and Vue',
|
||||
],
|
||||
[
|
||||
'name' => 'app_logo',
|
||||
'value' => 'system/logo.svg',
|
||||
],
|
||||
[
|
||||
'name' => 'app_logo_horizontal',
|
||||
'value' => 'system/logo-horizontal.svg',
|
||||
],
|
||||
[
|
||||
'name' => 'app_favicon',
|
||||
'value' => 'system/favicon.png',
|
||||
],
|
||||
[
|
||||
'name' => 'app_og_image',
|
||||
'value' => 'system/og-image.jpg',
|
||||
],
|
||||
[
|
||||
'name' => 'app_touch_icon',
|
||||
'value' => 'system/touch-icon.png',
|
||||
],
|
||||
[
|
||||
'name' => 'google_analytics',
|
||||
'value' => '',
|
||||
],
|
||||
[
|
||||
'name' => 'contact_email',
|
||||
'value' => '',
|
||||
],
|
||||
[
|
||||
'name' => 'registration',
|
||||
'value' => 1,
|
||||
],
|
||||
[
|
||||
'name' => 'payments_active',
|
||||
'value' => 1,
|
||||
],
|
||||
[
|
||||
'name' => 'storage_limitation',
|
||||
'value' => 1,
|
||||
],
|
||||
[
|
||||
'name' => 'storage_default',
|
||||
'value' => 5,
|
||||
],
|
||||
[
|
||||
'name' => 'setup_wizard_success',
|
||||
'value' => 1,
|
||||
],
|
||||
[
|
||||
'name' => 'license',
|
||||
'value' => $this->license,
|
||||
],
|
||||
[
|
||||
'name' => 'purchase_code',
|
||||
'value' => '26b889eb-3602-4bf2-beb3-3sc378fcf484',
|
||||
],
|
||||
[
|
||||
'name' => 'billing_address',
|
||||
'value' => 'Palo Alto 20',
|
||||
],
|
||||
[
|
||||
'name' => 'billing_city',
|
||||
'value' => 'Palo Alto',
|
||||
],
|
||||
[
|
||||
'name' => 'billing_country',
|
||||
'value' => 'US',
|
||||
],
|
||||
[
|
||||
'name' => 'billing_name',
|
||||
'value' => 'VueFileManager Inc.',
|
||||
],
|
||||
[
|
||||
'name' => 'billing_phone_number',
|
||||
'value' => '312343141243214',
|
||||
],
|
||||
[
|
||||
'name' => 'billing_postal_code',
|
||||
'value' => '43213',
|
||||
],
|
||||
[
|
||||
'name' => 'billing_state',
|
||||
'value' => 'California',
|
||||
],
|
||||
[
|
||||
'name' => 'billing_vat_number',
|
||||
'value' => '41241241234',
|
||||
],
|
||||
])->each(function ($col) {
|
||||
Setting::forceCreate([
|
||||
'name' => $col['name'],
|
||||
'value' => $col['value'],
|
||||
]);
|
||||
});
|
||||
|
||||
// Get system images
|
||||
collect(['logo.svg', 'logo-horizontal.svg', 'favicon.png', 'og-image.jpg', 'touch-icon.png'])
|
||||
->each(function ($file) {
|
||||
Storage::putFileAs('system', storage_path("demo/app/$file"), $file, 'private');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Migrate database and generate application keys
|
||||
*/
|
||||
private function migrate_and_generate(): void
|
||||
{
|
||||
// Migrate database
|
||||
$this->call('migrate:fresh', [
|
||||
'--force' => true,
|
||||
]);
|
||||
|
||||
// Generate app key
|
||||
$this->call('key:generate', [
|
||||
'--force' => true,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear app cache
|
||||
*/
|
||||
private function clear_cache(): void
|
||||
{
|
||||
$this->call('cache:clear');
|
||||
$this->call('config:clear');
|
||||
$this->call('view:clear');
|
||||
}
|
||||
}
|
||||
100
app/Console/Commands/SetupOasisEnvironment.php
Normal file
100
app/Console/Commands/SetupOasisEnvironment.php
Normal 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'],
|
||||
]);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -1,23 +1,20 @@
|
||||
<?php
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use App\Users\Models\User;
|
||||
use App\Models\User;
|
||||
use App\Models\Setting;
|
||||
use App\Services\SetupService;
|
||||
use Illuminate\Console\Command;
|
||||
use Domain\Settings\Models\Setting;
|
||||
use Illuminate\Foundation\Testing\WithFaker;
|
||||
use Domain\Pages\Actions\SeedDefaultPagesAction;
|
||||
use Domain\Settings\Actions\SeedDefaultSettingsAction;
|
||||
use Domain\Localization\Actions\SeedDefaultLanguageAction;
|
||||
use Domain\SetupWizard\Actions\CreateDiskDirectoriesAction;
|
||||
|
||||
class SetupProdEnvironment extends Command
|
||||
{
|
||||
use WithFaker;
|
||||
|
||||
/**
|
||||
* The name and signature of the console command.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $signature = 'setup:prod {license=extended}';
|
||||
protected $signature = 'setup:prod';
|
||||
protected $license = 'Extended';
|
||||
|
||||
/**
|
||||
* The console command description.
|
||||
@@ -26,14 +23,12 @@ class SetupProdEnvironment extends Command
|
||||
*/
|
||||
protected $description = 'Set up production environment';
|
||||
|
||||
public function __construct(
|
||||
private CreateDiskDirectoriesAction $createDiskDirectories,
|
||||
private SeedDefaultSettingsAction $seedDefaultSettings,
|
||||
private SeedDefaultLanguageAction $seedDefaultLanguage,
|
||||
private SeedDefaultPagesAction $seedDefaultPages,
|
||||
) {
|
||||
private $setup;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->setUpFaker();
|
||||
$this->setup = resolve(SetupService::class);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -46,17 +41,16 @@ class SetupProdEnvironment extends Command
|
||||
$this->info('Setting up production environment');
|
||||
|
||||
$this->info('Creating system directories...');
|
||||
($this->createDiskDirectories)();
|
||||
$this->setup->create_directories();
|
||||
|
||||
$this->info('Migrating Databases...');
|
||||
$this->migrate_and_generate();
|
||||
|
||||
$this->info('Storing default settings and content...');
|
||||
$this->store_default_settings();
|
||||
|
||||
($this->seedDefaultPages)();
|
||||
($this->seedDefaultSettings)($this->argument('license'));
|
||||
($this->seedDefaultLanguage)();
|
||||
$this->setup->seed_default_pages();
|
||||
$this->setup->seed_default_settings($this->license);
|
||||
$this->setup->seed_default_language();
|
||||
|
||||
$this->info('Creating default admin...');
|
||||
$this->create_admin();
|
||||
@@ -64,13 +58,6 @@ class SetupProdEnvironment extends Command
|
||||
$this->info('Clearing application cache...');
|
||||
$this->clear_cache();
|
||||
|
||||
$this->info('Dispatching jobs...');
|
||||
$this->call('queue:work', [
|
||||
'--stop-when-empty' => true,
|
||||
]);
|
||||
|
||||
$this->warn('Please make sure your current host/domain where you are running app is included in your .env SANCTUM_STATEFUL_DOMAINS variable.');
|
||||
|
||||
$this->info('Everything is done, congratulations! 🥳🥳🥳');
|
||||
}
|
||||
|
||||
@@ -82,8 +69,8 @@ class SetupProdEnvironment extends Command
|
||||
// Get options
|
||||
collect([
|
||||
[
|
||||
'name' => 'app_color',
|
||||
'value' => '#00BC7E',
|
||||
'name' => 'setup_wizard_database',
|
||||
'value' => 1,
|
||||
],
|
||||
[
|
||||
'name' => 'app_title',
|
||||
@@ -97,18 +84,10 @@ class SetupProdEnvironment extends Command
|
||||
'name' => 'app_logo',
|
||||
'value' => null,
|
||||
],
|
||||
[
|
||||
'name' => 'app_logo_dark',
|
||||
'value' => null,
|
||||
],
|
||||
[
|
||||
'name' => 'app_logo_horizontal',
|
||||
'value' => null,
|
||||
],
|
||||
[
|
||||
'name' => 'app_logo_horizontal_dark',
|
||||
'value' => null,
|
||||
],
|
||||
[
|
||||
'name' => 'app_favicon',
|
||||
'value' => null,
|
||||
@@ -133,29 +112,21 @@ class SetupProdEnvironment extends Command
|
||||
'name' => 'registration',
|
||||
'value' => 0,
|
||||
],
|
||||
[
|
||||
'name' => 'user_verification',
|
||||
'value' => 1,
|
||||
],
|
||||
[
|
||||
'name' => 'storage_limitation',
|
||||
'value' => 1,
|
||||
],
|
||||
[
|
||||
'name' => 'default_max_storage_amount',
|
||||
'name' => 'storage_default',
|
||||
'value' => 5,
|
||||
],
|
||||
[
|
||||
'name' => 'default_max_team_member',
|
||||
'value' => 10,
|
||||
],
|
||||
[
|
||||
'name' => 'setup_wizard_success',
|
||||
'value' => 1,
|
||||
],
|
||||
[
|
||||
'name' => 'license',
|
||||
'value' => $this->argument('license'),
|
||||
'value' => $this->license,
|
||||
],
|
||||
[
|
||||
'name' => 'purchase_code',
|
||||
@@ -193,30 +164,12 @@ class SetupProdEnvironment extends Command
|
||||
'name' => 'billing_vat_number',
|
||||
'value' => null,
|
||||
],
|
||||
[
|
||||
'name' => 'allowed_recaptcha',
|
||||
'value' => 0,
|
||||
],
|
||||
])->each(function ($col) {
|
||||
Setting::forceCreate([
|
||||
'name' => $col['name'],
|
||||
'value' => $col['value'],
|
||||
]);
|
||||
});
|
||||
|
||||
if ($this->argument('license') === 'extended') {
|
||||
$choice = $this->choice('Choose subscription type', [
|
||||
'metered' => 'Metered',
|
||||
'fixed' => 'Fixed',
|
||||
'none' => 'None',
|
||||
]);
|
||||
|
||||
Setting::updateOrCreate([
|
||||
'name' => 'subscription_type',
|
||||
], [
|
||||
'value' => $choice,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -225,24 +178,16 @@ class SetupProdEnvironment extends Command
|
||||
private function create_admin(): void
|
||||
{
|
||||
$user = User::forceCreate([
|
||||
'role' => 'admin',
|
||||
'email' => 'howdy@hi5ve.digital',
|
||||
'password' => bcrypt('vuefilemanager'),
|
||||
'email_verified_at' => now(),
|
||||
'role' => 'admin',
|
||||
'email' => 'howdy@hi5ve.digital',
|
||||
'password' => bcrypt('vuefilemanager'),
|
||||
]);
|
||||
|
||||
$user
|
||||
->settings()
|
||||
->create([
|
||||
'first_name' => 'Jane',
|
||||
'last_name' => '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_capacity' => 5,
|
||||
'name' => 'Admin',
|
||||
]);
|
||||
|
||||
// Show user credentials
|
||||
@@ -263,12 +208,6 @@ class SetupProdEnvironment extends Command
|
||||
$this->call('key:generate', [
|
||||
'--force' => true,
|
||||
]);
|
||||
|
||||
$currentHost = request()->getHost() . ',' . request()->getHost() . ':' . request()->getPort();
|
||||
|
||||
setEnvironmentValue([
|
||||
'SANCTUM_STATEFUL_DOMAINS' => "localhost,localhost:8000,127.0.0.1,127.0.0.1:8000,::1,$currentHost",
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
77
app/Console/Kernel.php
Normal file
77
app/Console/Kernel.php
Normal file
@@ -0,0 +1,77 @@
|
||||
<?php
|
||||
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
|
||||
{
|
||||
/**
|
||||
* The Artisan commands provided by your application.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $commands = [
|
||||
SetupDevEnvironment::class,
|
||||
SetupProdEnvironment::class,
|
||||
SetupOasisEnvironment::class,
|
||||
];
|
||||
|
||||
/**
|
||||
* Define the application's command schedule.
|
||||
*
|
||||
* @param \Illuminate\Console\Scheduling\Schedule $schedule
|
||||
* @return void
|
||||
*/
|
||||
protected function schedule(Schedule $schedule)
|
||||
{
|
||||
$scheduler = resolve(SchedulerService::class);
|
||||
|
||||
$schedule->call(function () use ($scheduler) {
|
||||
$scheduler->delete_expired_shared_links();
|
||||
})->everyTenMinutes();
|
||||
|
||||
$schedule->call(function () use ($scheduler) {
|
||||
$scheduler->delete_old_zips();
|
||||
|
||||
if (! is_storage_driver(['local'])) {
|
||||
$scheduler->delete_failed_files();
|
||||
}
|
||||
})->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()
|
||||
->withoutOverlapping();
|
||||
|
||||
// Backup app database daily
|
||||
$schedule->command('backup:clean')
|
||||
->daily()
|
||||
->at('01:00');
|
||||
$schedule->command('backup:run --only-db')
|
||||
->daily()
|
||||
->at('01:30');
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the commands for the application.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function commands()
|
||||
{
|
||||
$this->load(__DIR__ . '/Commands');
|
||||
|
||||
require base_path('routes/console.php');
|
||||
}
|
||||
}
|
||||
57
app/Http/Controllers/Admin/DashboardController.php
Normal file
57
app/Http/Controllers/Admin/DashboardController.php
Normal file
@@ -0,0 +1,57 @@
|
||||
<?php
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Models\User;
|
||||
use ByteUnits\Metric;
|
||||
use App\Services\StripeService;
|
||||
use Laravel\Cashier\Subscription;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Resources\UsersCollection;
|
||||
|
||||
class DashboardController extends Controller
|
||||
{
|
||||
private StripeService $stripe;
|
||||
|
||||
public function __construct(StripeService $stripe)
|
||||
{
|
||||
$this->stripe = $stripe;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get data for dashboard
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
// Get total premium users
|
||||
$premium_users = Subscription::whereStripeStatus('active')
|
||||
->count();
|
||||
|
||||
// Get total storage usage
|
||||
$storage_usage = Metric::bytes(
|
||||
\DB::table('files')->sum('filesize')
|
||||
)->format();
|
||||
|
||||
return [
|
||||
'license' => get_setting('license'),
|
||||
'app_version' => config('vuefilemanager.version'),
|
||||
'total_users' => User::count(),
|
||||
'total_used_space' => $storage_usage,
|
||||
'total_premium_users' => $premium_users,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the newest users
|
||||
*
|
||||
* @return UsersCollection
|
||||
*/
|
||||
public function newbies()
|
||||
{
|
||||
return new UsersCollection(
|
||||
User::sortable(['created_at' => 'desc'])
|
||||
->paginate(10)
|
||||
);
|
||||
}
|
||||
}
|
||||
44
app/Http/Controllers/Admin/InvoiceController.php
Normal file
44
app/Http/Controllers/Admin/InvoiceController.php
Normal file
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Models\Invoice;
|
||||
use App\Services\StripeService;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Resources\InvoiceResource;
|
||||
use App\Http\Resources\InvoiceAdminCollection;
|
||||
|
||||
class InvoiceController extends Controller
|
||||
{
|
||||
private StripeService $stripe;
|
||||
|
||||
public function __construct(StripeService $stripe)
|
||||
{
|
||||
$this->stripe = $stripe;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all invoices
|
||||
*
|
||||
* @return InvoiceAdminCollection
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
return new InvoiceAdminCollection(
|
||||
$this->stripe->getInvoices()['data']
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get single invoice by invoice $token
|
||||
*
|
||||
* @param $customer
|
||||
* @param $token
|
||||
* @return InvoiceResource|\Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View
|
||||
*/
|
||||
public function show($customer, $token)
|
||||
{
|
||||
return view('vuefilemanager.invoice')
|
||||
->with('settings', get_settings_in_json())
|
||||
->with('invoice', $this->stripe->getUserInvoice($customer, $token));
|
||||
}
|
||||
}
|
||||
138
app/Http/Controllers/Admin/LanguageController.php
Normal file
138
app/Http/Controllers/Admin/LanguageController.php
Normal file
@@ -0,0 +1,138 @@
|
||||
<?php
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Models\Setting;
|
||||
use App\Models\Language;
|
||||
use Illuminate\Http\Response;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Resources\LanguageResource;
|
||||
use App\Http\Resources\LanguageCollection;
|
||||
use Illuminate\Contracts\Foundation\Application;
|
||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
||||
use App\Http\Requests\Languages\UpdateStringRequest;
|
||||
use App\Http\Requests\Languages\CreateLanguageRequest;
|
||||
use App\Http\Requests\Languages\UpdateLanguageRequest;
|
||||
|
||||
class LanguageController extends Controller
|
||||
{
|
||||
/**
|
||||
* Get all languages for admin translate
|
||||
*
|
||||
* @return array|Application|ResponseFactory|Response
|
||||
*/
|
||||
public function get_languages()
|
||||
{
|
||||
return response(
|
||||
new LanguageCollection(Language::sortable(['created_at', 'DESC'])->get()),
|
||||
200
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all language strings for admin translate
|
||||
*
|
||||
* @param Language $language
|
||||
*/
|
||||
public function get_language(Language $language)
|
||||
{
|
||||
return response(
|
||||
new LanguageResource($language),
|
||||
200
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create new language
|
||||
*
|
||||
* @param CreateLanguageRequest $request
|
||||
* @return string
|
||||
*/
|
||||
public function create_language(CreateLanguageRequest $request)
|
||||
{
|
||||
// Abort in demo mode
|
||||
abort_if(is_demo(), 204, 'Done.');
|
||||
|
||||
$language = Language::create([
|
||||
'name' => $request->input('name'),
|
||||
'locale' => $request->input('locale'),
|
||||
]);
|
||||
|
||||
return response(
|
||||
new LanguageResource($language),
|
||||
201
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update language
|
||||
*
|
||||
* @param UpdateLanguageRequest $request
|
||||
* @param Language $language
|
||||
*/
|
||||
public function update_language(UpdateLanguageRequest $request, Language $language)
|
||||
{
|
||||
// Abort in demo mode
|
||||
abort_if(is_demo(), 204, 'Done.');
|
||||
|
||||
$language->update(make_single_input($request));
|
||||
|
||||
return response(
|
||||
new LanguageResource($language),
|
||||
201
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update string for language
|
||||
*
|
||||
* @param UpdateStringRequest $request
|
||||
* @param Language $language
|
||||
* @return Application|ResponseFactory|Response
|
||||
*/
|
||||
public function update_string(UpdateStringRequest $request, Language $language)
|
||||
{
|
||||
// Abort in demo mode
|
||||
abort_if(is_demo(), 204, 'Done.');
|
||||
|
||||
$language
|
||||
->languageTranslations()
|
||||
->where('key', $request->name)
|
||||
->update([
|
||||
'value' => $request->value,
|
||||
]);
|
||||
|
||||
cache()->forget("language-translations-{$language->locale}");
|
||||
|
||||
return response(
|
||||
'Done',
|
||||
204
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete the language with all children strings
|
||||
* @param Language $language
|
||||
* @return Response
|
||||
*/
|
||||
public function delete_language(Language $language): Response
|
||||
{
|
||||
// Abort in demo mode
|
||||
abort_if(is_demo(), 204, 'Done.');
|
||||
|
||||
abort_if($language->locale === 'en', 401, "Sorry, you can't delete default language.");
|
||||
|
||||
// If user try to delete language used as default,
|
||||
// then set en language as default
|
||||
if ($language->locale === get_setting('language')) {
|
||||
Setting::whereName('language')->first()
|
||||
->update(['value' => 'en']);
|
||||
}
|
||||
|
||||
$language->delete();
|
||||
|
||||
return response(
|
||||
'Done',
|
||||
204
|
||||
);
|
||||
}
|
||||
}
|
||||
64
app/Http/Controllers/Admin/PagesController.php
Normal file
64
app/Http/Controllers/Admin/PagesController.php
Normal file
@@ -0,0 +1,64 @@
|
||||
<?php
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Models\Page;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Services\DemoService;
|
||||
use Illuminate\Http\Response;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Resources\PageResource;
|
||||
use App\Http\Resources\PageCollection;
|
||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
||||
|
||||
class PagesController extends Controller
|
||||
{
|
||||
private $demo;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->demo = resolve(DemoService::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all pages
|
||||
*
|
||||
* @return PageCollection
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
return new PageCollection(
|
||||
Page::sortable()
|
||||
->paginate(10)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get single page resource
|
||||
*
|
||||
* @param $page
|
||||
* @return PageResource
|
||||
*/
|
||||
public function show(Page $page)
|
||||
{
|
||||
return new PageResource($page);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update page content
|
||||
*
|
||||
* @param Request $request
|
||||
* @param Page $page
|
||||
* @return ResponseFactory|Response
|
||||
*/
|
||||
public function update(Request $request, Page $page)
|
||||
{
|
||||
// Abort in demo mode
|
||||
abort_if(is_demo(), 204, 'Done.');
|
||||
|
||||
$page->update(
|
||||
make_single_input($request)
|
||||
);
|
||||
|
||||
return response(new PageResource($page), 204);
|
||||
}
|
||||
}
|
||||
158
app/Http/Controllers/Admin/PlanController.php
Normal file
158
app/Http/Controllers/Admin/PlanController.php
Normal file
@@ -0,0 +1,158 @@
|
||||
<?php
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Models\Plan;
|
||||
use App\Models\User;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Services\DemoService;
|
||||
use Illuminate\Http\Response;
|
||||
use App\Services\StripeService;
|
||||
use Laravel\Cashier\Subscription;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Resources\PlanResource;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use App\Http\Resources\PlanCollection;
|
||||
use App\Http\Resources\UsersCollection;
|
||||
use Illuminate\Contracts\Foundation\Application;
|
||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
||||
|
||||
class PlanController extends Controller
|
||||
{
|
||||
private StripeService $stripe;
|
||||
|
||||
private DemoService $demo;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->stripe = resolve(StripeService::class);
|
||||
$this->demo = resolve(DemoService::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all plans
|
||||
*
|
||||
* @return PlanCollection|Application|ResponseFactory|Response
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
// Store or Get plans to cache
|
||||
if (Cache::has('plans')) {
|
||||
$plans = Cache::get('plans');
|
||||
} else {
|
||||
$plans = Cache::rememberForever('plans', function () {
|
||||
return $this->stripe->getPlans();
|
||||
});
|
||||
}
|
||||
|
||||
return response(new PlanCollection($plans), 200);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get plan record
|
||||
*
|
||||
* @param $id
|
||||
* @return PlanResource|Application|ResponseFactory|Response
|
||||
*/
|
||||
public function show($id)
|
||||
{
|
||||
// Store or Get plan to cache
|
||||
if (Cache::has('plan-' . $id)) {
|
||||
$plan = Cache::get('plan-' . $id);
|
||||
} else {
|
||||
$plan = Cache::rememberForever('plan-' . $id, function () use ($id) {
|
||||
return $this->stripe->getPlan($id);
|
||||
});
|
||||
}
|
||||
|
||||
return response(new PlanResource($plan), 200);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create new plan
|
||||
*
|
||||
* @param Request $request
|
||||
* @return PlanResource|Application|ResponseFactory|Response
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
// TODO: inline request
|
||||
if (is_demo()) {
|
||||
if (Cache::has('plan-starter-pack')) {
|
||||
$plan = Cache::get('plan-starter-pack');
|
||||
} else {
|
||||
$plan = Cache::rememberForever('plan-starter-pack', function () {
|
||||
return $this->stripe->getPlan('starter-pack');
|
||||
});
|
||||
}
|
||||
|
||||
return new PlanResource($plan);
|
||||
}
|
||||
|
||||
$plan = new PlanResource(
|
||||
$this->stripe->createPlan($request)
|
||||
);
|
||||
|
||||
// Clear cached plans
|
||||
cache_forget_many(['plans', 'pricing']);
|
||||
|
||||
return response($plan, 201);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update plan attribute
|
||||
*
|
||||
* @param Request $request
|
||||
* @param $id
|
||||
* @return ResponseFactory|Response
|
||||
*/
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
// Abort in demo mode
|
||||
abort_if(is_demo(), 204, 'Done.');
|
||||
|
||||
// Update plan
|
||||
$this->stripe->updatePlan($request, $id);
|
||||
|
||||
// Clear cached plans
|
||||
cache_forget_many(['plans', 'pricing', 'plan-' . $id]);
|
||||
|
||||
return response('Saved!', 201);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete plan
|
||||
*
|
||||
* @param $id
|
||||
* @return ResponseFactory|Response
|
||||
*/
|
||||
public function delete($id)
|
||||
{
|
||||
// Abort in demo mode
|
||||
abort_if(is_demo(), 204, 'Done.');
|
||||
|
||||
// Delete plan
|
||||
$this->stripe->deletePlan($id);
|
||||
|
||||
// Clear cached plans
|
||||
cache_forget_many(['plans', 'pricing']);
|
||||
|
||||
return response('Done!', 204);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get subscriptions
|
||||
*
|
||||
* @param $id
|
||||
* @return mixed
|
||||
*/
|
||||
public function subscribers($id)
|
||||
{
|
||||
$subscribers = Subscription::whereStripePlan($id)
|
||||
->pluck('user_id');
|
||||
|
||||
return new UsersCollection(
|
||||
User::sortable()
|
||||
->findMany($subscribers)
|
||||
);
|
||||
}
|
||||
}
|
||||
182
app/Http/Controllers/Admin/SettingController.php
Normal file
182
app/Http/Controllers/Admin/SettingController.php
Normal file
@@ -0,0 +1,182 @@
|
||||
<?php
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use Stripe;
|
||||
use Artisan;
|
||||
use App\Models\Setting;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Services\DemoService;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Cartalyst\Stripe\Exception\UnauthorizedException;
|
||||
use Symfony\Component\HttpKernel\Exception\HttpException;
|
||||
|
||||
class SettingController extends Controller
|
||||
{
|
||||
private $demo;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->demo = resolve(DemoService::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get table content
|
||||
*
|
||||
* @param Request $request
|
||||
* @return mixed
|
||||
*/
|
||||
public function show(Request $request)
|
||||
{
|
||||
if (strpos($request->column, '|') !== false) {
|
||||
$columns = explode('|', $request->column);
|
||||
|
||||
return Setting::whereIn('name', $columns)
|
||||
->pluck('value', 'name');
|
||||
}
|
||||
|
||||
return Setting::where('name', $request->column)
|
||||
->pluck('value', 'name');
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function update(Request $request)
|
||||
{
|
||||
// Abort in demo mode
|
||||
abort_if(is_demo(), 204, 'Done.');
|
||||
|
||||
// Store image if exist
|
||||
if ($request->hasFile($request->name)) {
|
||||
// Find and update image path
|
||||
Setting::updateOrCreate([
|
||||
'name' => $request->name,
|
||||
], [
|
||||
'value' => store_system_image($request, $request->name),
|
||||
]);
|
||||
|
||||
return response('Done', 204);
|
||||
}
|
||||
|
||||
// Find and update variable
|
||||
Setting::updateOrCreate(
|
||||
['name' => $request->name],
|
||||
['value' => $request->value]
|
||||
);
|
||||
|
||||
return response('Done', 204);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set new email credentials to .env file
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response
|
||||
*/
|
||||
public function set_email(Request $request)
|
||||
{
|
||||
// TODO: pridat validator do requestu
|
||||
// Abort in demo mode
|
||||
abort_if(is_demo(), 204, 'Done.');
|
||||
|
||||
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_ENCRYPTION' => $request->encryption,
|
||||
]);
|
||||
|
||||
// Clear config cache
|
||||
Artisan::call('config:clear');
|
||||
Artisan::call('config:cache');
|
||||
}
|
||||
|
||||
return response('Done', 204);
|
||||
}
|
||||
|
||||
/**
|
||||
* Configure stripe additionally
|
||||
*
|
||||
* @param Request $request
|
||||
*/
|
||||
public function set_stripe(Request $request)
|
||||
{
|
||||
// TODO: pridat validator do requestu
|
||||
// Check payment setup status
|
||||
if (get_setting('payments_configured')) {
|
||||
abort(401, 'Gone');
|
||||
}
|
||||
|
||||
// Try to get stripe account details
|
||||
try {
|
||||
if (! app()->runningUnitTests()) {
|
||||
Stripe::make($request->secret, '2020-03-02')
|
||||
->account()
|
||||
->details();
|
||||
}
|
||||
} catch (UnauthorizedException $e) {
|
||||
throw new HttpException(401, $e->getMessage());
|
||||
}
|
||||
|
||||
// Get options
|
||||
collect([
|
||||
[
|
||||
'name' => 'stripe_currency',
|
||||
'value' => $request->currency,
|
||||
],
|
||||
[
|
||||
'name' => 'payments_configured',
|
||||
'value' => 1,
|
||||
],
|
||||
[
|
||||
'name' => 'payments_active',
|
||||
'value' => 1,
|
||||
],
|
||||
])->each(function ($col) {
|
||||
Setting::forceCreate([
|
||||
'name' => $col['name'],
|
||||
'value' => $col['value'],
|
||||
]);
|
||||
});
|
||||
|
||||
if (! app()->runningUnitTests()) {
|
||||
// Set stripe credentials to .env
|
||||
setEnvironmentValue([
|
||||
'CASHIER_CURRENCY' => $request->currency,
|
||||
'STRIPE_KEY' => $request->key,
|
||||
'STRIPE_SECRET' => $request->secret,
|
||||
'STRIPE_WEBHOOK_SECRET' => $request->webhookSecret,
|
||||
]);
|
||||
|
||||
// Clear cache
|
||||
Artisan::call('cache:clear');
|
||||
Artisan::call('config:clear');
|
||||
Artisan::call('config:cache');
|
||||
}
|
||||
|
||||
return response('Done', 204);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear application cache
|
||||
*/
|
||||
public function flush_cache()
|
||||
{
|
||||
// Abort in demo mode
|
||||
abort_if(is_demo(), 204, 'Done.');
|
||||
|
||||
if (! app()->runningUnitTests()) {
|
||||
Artisan::call('cache:clear');
|
||||
Artisan::call('config:clear');
|
||||
Artisan::call('config:cache');
|
||||
}
|
||||
|
||||
return response('Done', 204);
|
||||
}
|
||||
}
|
||||
230
app/Http/Controllers/Admin/UserController.php
Normal file
230
app/Http/Controllers/Admin/UserController.php
Normal file
@@ -0,0 +1,230 @@
|
||||
<?php
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use Storage;
|
||||
use App\Models\User;
|
||||
use App\Models\UserSettings;
|
||||
use Illuminate\Http\Response;
|
||||
use App\Services\StripeService;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Resources\UserResource;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use App\Http\Resources\UsersCollection;
|
||||
use App\Http\Resources\UserSubscription;
|
||||
use Illuminate\Support\Facades\Password;
|
||||
use App\Http\Resources\InvoiceCollection;
|
||||
use App\Http\Resources\UserStorageResource;
|
||||
use App\Http\Requests\Admin\ChangeRoleRequest;
|
||||
use App\Http\Requests\Admin\CreateUserByAdmin;
|
||||
use App\Http\Requests\Admin\DeleteUserRequest;
|
||||
use Illuminate\Contracts\Foundation\Application;
|
||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
||||
use App\Http\Requests\Admin\ChangeStorageCapacityRequest;
|
||||
|
||||
class UserController extends Controller
|
||||
{
|
||||
private StripeService $stripe;
|
||||
|
||||
public function __construct(StripeService $stripe)
|
||||
{
|
||||
$this->stripe = $stripe;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get user details
|
||||
*
|
||||
* @param User $user
|
||||
* @return UserResource
|
||||
*/
|
||||
public function details(User $user)
|
||||
{
|
||||
return new UserResource(
|
||||
$user
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get user storage details
|
||||
*
|
||||
* @param User $user
|
||||
* @return UserStorageResource
|
||||
*/
|
||||
public function storage(User $user)
|
||||
{
|
||||
return new UserStorageResource(
|
||||
$user
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get user storage details
|
||||
*
|
||||
* @param User $user
|
||||
* @return InvoiceCollection
|
||||
*/
|
||||
public function invoices(User $user)
|
||||
{
|
||||
return new InvoiceCollection(
|
||||
$this
|
||||
->stripe
|
||||
->getUserInvoices($user)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get user subscription details
|
||||
*
|
||||
* @param User $user
|
||||
* @return UserSubscription|Application|ResponseFactory|Response
|
||||
*/
|
||||
public function subscription(User $user)
|
||||
{
|
||||
if (! $user->stripeId() || ! $user->subscription('main')) {
|
||||
return response("User doesn't have any subscription.", 404);
|
||||
}
|
||||
|
||||
return new UserSubscription(
|
||||
$user
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all users
|
||||
*
|
||||
* @return UsersCollection
|
||||
*/
|
||||
public function users()
|
||||
{
|
||||
return new UsersCollection(
|
||||
User::sortable(['created_at', 'DESC'])
|
||||
->paginate(20)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Change user role
|
||||
*
|
||||
* @param ChangeRoleRequest $request
|
||||
* @param User $user
|
||||
* @return UserResource
|
||||
*/
|
||||
public function change_role(ChangeRoleRequest $request, User $user)
|
||||
{
|
||||
// Demo preview
|
||||
if (is_demo_account('howdy@hi5ve.digial')) {
|
||||
return new UserResource($user);
|
||||
}
|
||||
|
||||
// Update user role
|
||||
$user->role = $request->input('attributes.role');
|
||||
$user->save();
|
||||
|
||||
return new UserResource(
|
||||
$user
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Change user storage capacity
|
||||
*
|
||||
* @param ChangeStorageCapacityRequest $request
|
||||
* @param User $user
|
||||
* @return UserStorageResource
|
||||
*/
|
||||
public function change_storage_capacity(ChangeStorageCapacityRequest $request, User $user)
|
||||
{
|
||||
$user
|
||||
->settings()
|
||||
->update(
|
||||
$request->input('attributes')
|
||||
);
|
||||
|
||||
return new UserStorageResource(
|
||||
$user
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Send user password reset link
|
||||
*
|
||||
* @param User $user
|
||||
* @return ResponseFactory|Response
|
||||
*/
|
||||
public function reset_password(User $user)
|
||||
{
|
||||
// Demo preview
|
||||
if (is_demo()) {
|
||||
return response('Done!', 204);
|
||||
}
|
||||
|
||||
// Get password token
|
||||
$token = Password::getRepository()
|
||||
->create($user);
|
||||
|
||||
// Send user email
|
||||
$user->sendPasswordResetNotification($token);
|
||||
|
||||
return response('Done!', 204);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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' => bcrypt($request->password),
|
||||
]);
|
||||
|
||||
UserSettings::unguard();
|
||||
|
||||
$user
|
||||
->settings()
|
||||
->create([
|
||||
'name' => $request->name,
|
||||
'avatar' => store_avatar($request, 'avatar'),
|
||||
'storage_capacity' => $request->storage_capacity,
|
||||
]);
|
||||
|
||||
UserSettings::reguard();
|
||||
|
||||
return response(new UserResource($user), 201);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete user with all user data
|
||||
*
|
||||
* @param DeleteUserRequest $request
|
||||
* @param User $user
|
||||
* @return ResponseFactory|Response
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function delete_user(DeleteUserRequest $request, User $user)
|
||||
{
|
||||
if (is_demo()) {
|
||||
return response('Done!', 204);
|
||||
}
|
||||
|
||||
if ($user->subscribed('main')) {
|
||||
abort(202, "You can\'t delete this account while user have active subscription.");
|
||||
}
|
||||
|
||||
if ($user->id === Auth::id()) {
|
||||
abort(406, "You can\'t delete your account");
|
||||
}
|
||||
|
||||
if ($user->settings->name !== $request->name) {
|
||||
abort(403, 'The name you typed is wrong!');
|
||||
}
|
||||
|
||||
$user->delete();
|
||||
|
||||
return response('Done!', 204);
|
||||
}
|
||||
}
|
||||
202
app/Http/Controllers/App/AppFunctionsController.php
Normal file
202
app/Http/Controllers/App/AppFunctionsController.php
Normal file
@@ -0,0 +1,202 @@
|
||||
<?php
|
||||
namespace App\Http\Controllers\App;
|
||||
|
||||
use App\Models\Page;
|
||||
use App\Models\Share;
|
||||
use App\Models\Setting;
|
||||
use App\Models\Language;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Response;
|
||||
use App\Services\StripeService;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Resources\PageResource;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use App\Http\Mail\SendContactMessage;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Doctrine\DBAL\Driver\PDOException;
|
||||
use Illuminate\Database\QueryException;
|
||||
use App\Http\Resources\PricingCollection;
|
||||
use Illuminate\Database\Eloquent\Collection;
|
||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
use App\Http\Requests\PublicPages\SendContactMessageRequest;
|
||||
|
||||
class AppFunctionsController extends Controller
|
||||
{
|
||||
/**
|
||||
* List of allowed settings to get from public request
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private array $blacklist = [
|
||||
'purchase_code',
|
||||
'license',
|
||||
];
|
||||
|
||||
private StripeService $stripe;
|
||||
|
||||
public function __construct(StripeService $stripe)
|
||||
{
|
||||
$this->stripe = $stripe;
|
||||
}
|
||||
|
||||
/**
|
||||
* Show index page
|
||||
*
|
||||
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
try {
|
||||
// Try to connect to database
|
||||
\DB::getPdo();
|
||||
|
||||
// Get setup status
|
||||
$setup_status = get_setup_status();
|
||||
|
||||
// Get app pages
|
||||
$pages = Page::all();
|
||||
|
||||
// Get all settings
|
||||
$settings = get_settings_in_json();
|
||||
} catch (PDOException $e) {
|
||||
$setup_status = 'setup-database';
|
||||
}
|
||||
|
||||
return view('index')
|
||||
->with('settings', $settings ?? null)
|
||||
->with('legal', $pages ?? null)
|
||||
->with('installation', $setup_status);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get og site for web crawlers
|
||||
*
|
||||
* @param Share $shared
|
||||
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View
|
||||
*/
|
||||
public function og_site(Share $shared)
|
||||
{
|
||||
// Get file/folder record
|
||||
$item = ('App\\Models\\' . ucfirst($shared->type))
|
||||
::where('user_id', $shared->user->id)
|
||||
->where('id', $shared->item_id)
|
||||
->first();
|
||||
|
||||
if ($item->thumbnail) {
|
||||
$item->setPublicUrl($shared->token);
|
||||
}
|
||||
|
||||
return view('vuefilemanager.crawler.og-view')
|
||||
->with('settings', get_settings_in_json())
|
||||
->with('metadata', [
|
||||
'url' => url('/share', ['token' => $shared->token]),
|
||||
'is_protected' => $shared->is_protected,
|
||||
'user' => $shared->user->settings->name,
|
||||
'name' => $item->name,
|
||||
'size' => $shared->type === 'folder'
|
||||
? $item->items
|
||||
: $item->filesize,
|
||||
'thumbnail' => $item->thumbnail ?? null,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Send contact message from pages
|
||||
*
|
||||
* @param SendContactMessageRequest $request
|
||||
* @return ResponseFactory|Response
|
||||
*/
|
||||
public function contact_form(SendContactMessageRequest $request)
|
||||
{
|
||||
Mail::to(
|
||||
get_setting('contact_email')
|
||||
)->send(
|
||||
new SendContactMessage($request->all())
|
||||
);
|
||||
|
||||
return response('Done', 201);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get single page content
|
||||
*
|
||||
* @param Page $page
|
||||
* @return PageResource
|
||||
*/
|
||||
public function get_page(Page $page)
|
||||
{
|
||||
return new PageResource($page);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get selected settings from public route
|
||||
*
|
||||
* @param Request $request
|
||||
* @return mixed
|
||||
*/
|
||||
public function get_setting_columns(Request $request)
|
||||
{
|
||||
if (strpos($request->column, '|') !== false) {
|
||||
$columns = collect(explode('|', $request->column))
|
||||
->each(function ($column) {
|
||||
if (in_array($column, $this->blacklist)) {
|
||||
abort(401);
|
||||
}
|
||||
});
|
||||
|
||||
return Setting::whereIn('name', $columns)
|
||||
->pluck('value', 'name');
|
||||
}
|
||||
|
||||
if (in_array($request->column, $this->blacklist)) {
|
||||
abort(401);
|
||||
}
|
||||
|
||||
return Setting::where('name', $request->column)
|
||||
->pluck('value', 'name');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all active storage plans
|
||||
*
|
||||
* @return PricingCollection
|
||||
*/
|
||||
public function get_storage_plans()
|
||||
{
|
||||
// Get pricing from cache
|
||||
$pricing = Cache::rememberForever('pricing', function () {
|
||||
return $this->stripe->getActivePlans();
|
||||
});
|
||||
|
||||
// Format pricing to collection
|
||||
$collection = new PricingCollection($pricing);
|
||||
|
||||
// Sort and return pricing
|
||||
return $collection
|
||||
->sortBy('product.metadata.capacity')
|
||||
->values()
|
||||
->all();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get language translations for frontend app
|
||||
*/
|
||||
public function get_translations($lang)
|
||||
{
|
||||
$translations = cache()
|
||||
->rememberForever("language-translations-$lang", function () use ($lang) {
|
||||
try {
|
||||
return Language::whereLocale($lang)
|
||||
->firstOrFail()
|
||||
->languageTranslations;
|
||||
} catch (QueryException | ModelNotFoundException $e) {
|
||||
return null;
|
||||
}
|
||||
});
|
||||
|
||||
return $translations
|
||||
? map_language_translations($translations)
|
||||
: get_default_language_translations();
|
||||
}
|
||||
}
|
||||
84
app/Http/Controllers/App/Maintenance.php
Normal file
84
app/Http/Controllers/App/Maintenance.php
Normal file
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
namespace App\Http\Controllers\App;
|
||||
|
||||
use Gate;
|
||||
use Artisan;
|
||||
use App\Models\Language;
|
||||
use Illuminate\Http\Response;
|
||||
use App\Services\LanguageService;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Contracts\Foundation\Application;
|
||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
||||
|
||||
class Maintenance extends Controller
|
||||
{
|
||||
/**
|
||||
* Start maintenance mode
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
// Check admin permission
|
||||
Gate::authorize('maintenance');
|
||||
|
||||
$command = Artisan::call('up');
|
||||
|
||||
if ($command === 0) {
|
||||
echo 'System is in production mode';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* End maintenance mode
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
// Check admin permission
|
||||
Gate::authorize('maintenance');
|
||||
|
||||
$command = Artisan::call('down');
|
||||
|
||||
if ($command === 0) {
|
||||
echo 'System is in maintenance mode';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get new language translations from default translations
|
||||
* and insert it into database
|
||||
*
|
||||
* @return Application|ResponseFactory|Response
|
||||
*/
|
||||
public function upgrade_translations()
|
||||
{
|
||||
// Check admin permission
|
||||
Gate::authorize('maintenance');
|
||||
|
||||
resolve(LanguageService::class)
|
||||
->upgrade_language_translations();
|
||||
|
||||
return response('Done.', 201);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int|mixed
|
||||
*/
|
||||
public function upgrade_database()
|
||||
{
|
||||
// Check admin permission
|
||||
Gate::authorize('maintenance');
|
||||
|
||||
$command = Artisan::call('migrate', [
|
||||
'--force' => true,
|
||||
]);
|
||||
|
||||
if ($command === 0) {
|
||||
echo 'Operation was successful.';
|
||||
}
|
||||
|
||||
if ($command === 1) {
|
||||
echo 'Operation failed.';
|
||||
}
|
||||
|
||||
return $command;
|
||||
}
|
||||
}
|
||||
479
app/Http/Controllers/App/SetupWizardController.php
Normal file
479
app/Http/Controllers/App/SetupWizardController.php
Normal file
@@ -0,0 +1,479 @@
|
||||
<?php
|
||||
namespace App\Http\Controllers\App;
|
||||
|
||||
use Schema;
|
||||
use Stripe;
|
||||
use Artisan;
|
||||
use App\Models\User;
|
||||
use App\Models\Setting;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Services\SetupService;
|
||||
use App\Services\StripeService;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use Doctrine\DBAL\Driver\PDOException;
|
||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
||||
use Cartalyst\Stripe\Exception\UnauthorizedException;
|
||||
use App\Http\Requests\SetupWizard\StoreAppSetupRequest;
|
||||
use Symfony\Component\HttpKernel\Exception\HttpException;
|
||||
use App\Http\Requests\SetupWizard\StoreStripePlansRequest;
|
||||
use App\Http\Requests\SetupWizard\StoreStripeBillingRequest;
|
||||
use App\Http\Requests\SetupWizard\StoreEnvironmentSetupRequest;
|
||||
use App\Http\Requests\SetupWizard\StoreStripeCredentialsRequest;
|
||||
use App\Http\Requests\SetupWizard\StoreDatabaseCredentialsRequest;
|
||||
|
||||
class SetupWizardController extends Controller
|
||||
{
|
||||
/**
|
||||
* Inject Stripe Service
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->stripe = resolve(StripeService::class);
|
||||
$this->setup = resolve(SetupService::class);
|
||||
|
||||
$this->check_setup_status();
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify Envato purchase code
|
||||
*
|
||||
* @param Request $request
|
||||
* @return ResponseFactory|\Illuminate\Http\Response|mixed
|
||||
*/
|
||||
public function verify_purchase_code(Request $request)
|
||||
{
|
||||
// Verify purchase code
|
||||
$response = Http::get('https://verify.vuefilemanager.com/api/verify-code/' . $request->purchaseCode);
|
||||
|
||||
if ($response->successful()) {
|
||||
return response($response, 204);
|
||||
}
|
||||
|
||||
return response('Purchase code is invalid.', 400);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set up database credentials
|
||||
*
|
||||
* @param StoreDatabaseCredentialsRequest $request
|
||||
* @return ResponseFactory|\Illuminate\Http\Response
|
||||
*/
|
||||
public function setup_database(StoreDatabaseCredentialsRequest $request)
|
||||
{
|
||||
if (! app()->runningUnitTests()) {
|
||||
try {
|
||||
// Set temporary database connection
|
||||
config(['database.connections.test.driver' => $request->connection]);
|
||||
config(['database.connections.test.host' => $request->host]);
|
||||
config(['database.connections.test.port' => $request->port]);
|
||||
config(['database.connections.test.database' => $request->name]);
|
||||
config(['database.connections.test.username' => $request->username]);
|
||||
config(['database.connections.test.password' => $request->password]);
|
||||
|
||||
// Test connection
|
||||
\DB::connection('test')->getPdo();
|
||||
} catch (PDOException $e) {
|
||||
throw new HttpException(500, $e->getMessage());
|
||||
}
|
||||
|
||||
// TODO: add SANCTUM_STATEFUL_DOMAINS parameter
|
||||
|
||||
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,
|
||||
]);
|
||||
|
||||
Artisan::call('config:cache');
|
||||
|
||||
Artisan::call('key:generate', [
|
||||
'--force' => true,
|
||||
]);
|
||||
|
||||
Artisan::call('migrate:fresh', [
|
||||
'--force' => true,
|
||||
]);
|
||||
}
|
||||
|
||||
// Store setup wizard progress
|
||||
Setting::forceCreate([
|
||||
'name' => 'setup_wizard_database',
|
||||
'value' => 1,
|
||||
]);
|
||||
|
||||
return response('Done', 204);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store and test stripe credentials
|
||||
*
|
||||
* @param StoreStripeCredentialsRequest $request
|
||||
* @return ResponseFactory|\Illuminate\Http\Response
|
||||
*/
|
||||
public function store_stripe_credentials(StoreStripeCredentialsRequest $request)
|
||||
{
|
||||
if (! app()->runningUnitTests()) {
|
||||
// Create stripe instance
|
||||
$stripe = Stripe::make($request->secret, '2020-03-02');
|
||||
|
||||
try {
|
||||
// Try to get stripe account details
|
||||
$stripe->account()->details();
|
||||
} catch (UnauthorizedException $e) {
|
||||
throw new HttpException(401, $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// Set settings
|
||||
collect([
|
||||
[
|
||||
'name' => 'stripe_currency',
|
||||
'value' => $request->currency,
|
||||
],
|
||||
[
|
||||
'name' => 'payments_configured',
|
||||
'value' => 1,
|
||||
],
|
||||
[
|
||||
'name' => 'payments_active',
|
||||
'value' => 1,
|
||||
],
|
||||
])->each(function ($col) {
|
||||
Setting::forceCreate([
|
||||
'name' => $col['name'],
|
||||
'value' => $col['value'],
|
||||
]);
|
||||
});
|
||||
|
||||
if (! app()->runningUnitTests()) {
|
||||
// Set stripe credentials to .env
|
||||
setEnvironmentValue([
|
||||
'CASHIER_CURRENCY' => $request->currency,
|
||||
'STRIPE_KEY' => $request->key,
|
||||
'STRIPE_SECRET' => $request->secret,
|
||||
'STRIPE_WEBHOOK_SECRET' => $request->webhookSecret,
|
||||
]);
|
||||
|
||||
// Clear cache
|
||||
Artisan::call('config:cache');
|
||||
}
|
||||
|
||||
return response('Done', 204);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store Stripe billings
|
||||
*
|
||||
* @param StoreStripeBillingRequest $request
|
||||
* @return ResponseFactory|\Illuminate\Http\Response
|
||||
*/
|
||||
public function store_stripe_billings(StoreStripeBillingRequest $request)
|
||||
{
|
||||
// Get options
|
||||
collect([
|
||||
[
|
||||
'name' => 'billing_phone_number',
|
||||
'value' => $request->billing_phone_number,
|
||||
],
|
||||
[
|
||||
'name' => 'billing_postal_code',
|
||||
'value' => $request->billing_postal_code,
|
||||
],
|
||||
[
|
||||
'name' => 'billing_vat_number',
|
||||
'value' => $request->billing_vat_number,
|
||||
],
|
||||
[
|
||||
'name' => 'billing_address',
|
||||
'value' => $request->billing_address,
|
||||
],
|
||||
[
|
||||
'name' => 'billing_country',
|
||||
'value' => $request->billing_country,
|
||||
],
|
||||
[
|
||||
'name' => 'billing_state',
|
||||
'value' => $request->billing_state,
|
||||
],
|
||||
[
|
||||
'name' => 'billing_city',
|
||||
'value' => $request->billing_city,
|
||||
],
|
||||
[
|
||||
'name' => 'billing_name',
|
||||
'value' => $request->billing_name,
|
||||
],
|
||||
])->each(function ($col) {
|
||||
Setting::forceCreate([
|
||||
'name' => $col['name'],
|
||||
'value' => $col['value'],
|
||||
]);
|
||||
});
|
||||
|
||||
if (! app()->runningUnitTests()) {
|
||||
Artisan::call('config:cache');
|
||||
}
|
||||
|
||||
return response('Done', 204);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create Stripe subscription plan
|
||||
*
|
||||
* @param StoreStripePlansRequest $request
|
||||
* @return \Illuminate\Contracts\Foundation\Application|ResponseFactory|\Illuminate\Http\Response
|
||||
*/
|
||||
public function store_stripe_plans(StoreStripePlansRequest $request)
|
||||
{
|
||||
foreach ($request->plans as $plan) {
|
||||
$this->stripe->createPlan($plan);
|
||||
}
|
||||
|
||||
return response('Done', 204);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store environment setup
|
||||
*
|
||||
* @param StoreEnvironmentSetupRequest $request
|
||||
* @return string
|
||||
*/
|
||||
public function store_environment_setup(StoreEnvironmentSetupRequest $request)
|
||||
{
|
||||
if (! app()->runningUnitTests()) {
|
||||
$drivers = [
|
||||
'local' => [
|
||||
'FILESYSTEM_DRIVER' => 'local',
|
||||
],
|
||||
's3' => [
|
||||
'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,
|
||||
],
|
||||
'spaces' => [
|
||||
'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,
|
||||
],
|
||||
'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,
|
||||
],
|
||||
'backblaze' => [
|
||||
'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,
|
||||
],
|
||||
'oss' => [
|
||||
'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,
|
||||
],
|
||||
];
|
||||
|
||||
// Storage credentials for storage
|
||||
setEnvironmentValue(
|
||||
$drivers[$request->storage['driver']]
|
||||
);
|
||||
|
||||
// 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_ENCRYPTION' => $request->mail['encryption'],
|
||||
]);
|
||||
|
||||
Artisan::call('config:cache');
|
||||
}
|
||||
|
||||
return response('Done', 204);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store app settings
|
||||
* @param StoreAppSetupRequest $request
|
||||
* @return ResponseFactory|\Illuminate\Http\Response
|
||||
*/
|
||||
public function store_app_settings(StoreAppSetupRequest $request)
|
||||
{
|
||||
// Get options
|
||||
collect([
|
||||
[
|
||||
'name' => 'app_title',
|
||||
'value' => $request->title,
|
||||
],
|
||||
[
|
||||
'name' => 'app_description',
|
||||
'value' => $request->description,
|
||||
],
|
||||
[
|
||||
'name' => 'app_logo',
|
||||
'value' => store_system_image($request, 'logo'),
|
||||
],
|
||||
[
|
||||
'name' => 'app_logo_horizontal',
|
||||
'value' => store_system_image($request, 'logo_horizontal'),
|
||||
],
|
||||
[
|
||||
'name' => 'app_favicon',
|
||||
'value' => store_system_image($request, 'favicon'),
|
||||
],
|
||||
[
|
||||
'name' => 'app_og_image',
|
||||
'value' => store_system_image($request, 'og_image'),
|
||||
],
|
||||
[
|
||||
'name' => 'app_touch_icon',
|
||||
'value' => store_system_image($request, 'touch_icon'),
|
||||
],
|
||||
[
|
||||
'name' => 'google_analytics',
|
||||
'value' => $request->googleAnalytics,
|
||||
],
|
||||
[
|
||||
'name' => 'contact_email',
|
||||
'value' => $request->contactMail,
|
||||
],
|
||||
[
|
||||
'name' => 'registration',
|
||||
'value' => $request->userRegistration,
|
||||
],
|
||||
[
|
||||
'name' => 'storage_limitation',
|
||||
'value' => $request->storageLimitation,
|
||||
],
|
||||
[
|
||||
'name' => 'storage_default',
|
||||
'value' => $request->defaultStorage ?? 5,
|
||||
],
|
||||
])->each(function ($col) {
|
||||
Setting::forceCreate([
|
||||
'name' => $col['name'],
|
||||
'value' => $col['value'],
|
||||
]);
|
||||
});
|
||||
|
||||
if (! app()->runningUnitTests()) {
|
||||
setEnvironmentValue([
|
||||
'APP_NAME' => Str::camel($request->title),
|
||||
]);
|
||||
}
|
||||
|
||||
return response('Done', 204);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create and login admin account
|
||||
*
|
||||
* @param Request $request
|
||||
* @return ResponseFactory|\Illuminate\Http\Response|\Symfony\Component\HttpFoundation\Response
|
||||
*/
|
||||
public function create_admin_account(Request $request)
|
||||
{
|
||||
// Validate request
|
||||
// TODO: validator do requestu
|
||||
$request->validate([
|
||||
'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',
|
||||
]);
|
||||
|
||||
// Create user
|
||||
$user = User::forceCreate([
|
||||
'role' => 'admin',
|
||||
'email' => $request->email,
|
||||
'password' => bcrypt($request->password),
|
||||
]);
|
||||
|
||||
$user
|
||||
->settings()
|
||||
->create([
|
||||
'storage_capacity' => get_setting('storage_default') ?? 5,
|
||||
'avatar' => store_avatar($request, 'avatar'),
|
||||
'name' => $request->name,
|
||||
]);
|
||||
|
||||
collect([
|
||||
[
|
||||
'name' => 'setup_wizard_success',
|
||||
'value' => 1,
|
||||
],
|
||||
[
|
||||
'name' => 'license',
|
||||
'value' => $request->license,
|
||||
],
|
||||
[
|
||||
'name' => 'purchase_code',
|
||||
'value' => $request->purchase_code,
|
||||
],
|
||||
])->each(function ($col) {
|
||||
Setting::forceCreate([
|
||||
'name' => $col['name'],
|
||||
'value' => $col['value'],
|
||||
]);
|
||||
});
|
||||
|
||||
// Set up application
|
||||
$this->setup->seed_default_pages();
|
||||
$this->setup->seed_default_settings($request->license);
|
||||
$this->setup->seed_default_language();
|
||||
|
||||
// Login account
|
||||
if (Auth::attempt($request->only(['email', 'password']))) {
|
||||
$request->session()->regenerate();
|
||||
|
||||
return response('Registration was successful', 204);
|
||||
}
|
||||
|
||||
return response('Something went wrong', 500);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get setup wizard status
|
||||
*
|
||||
* @return false | null
|
||||
*/
|
||||
private function check_setup_status()
|
||||
{
|
||||
try {
|
||||
// Check database connections
|
||||
DB::getPdo();
|
||||
|
||||
// Get setup_wizard status
|
||||
if (Schema::hasTable('settings') && get_setting('setup_wizard_success')) {
|
||||
abort(410, 'Gone');
|
||||
}
|
||||
} catch (PDOException $e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
31
app/Http/Controllers/Auth/AuthController.php
Normal file
31
app/Http/Controllers/Auth/AuthController.php
Normal file
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Models\User;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\Auth\CheckAccountRequest;
|
||||
|
||||
class AuthController extends Controller
|
||||
{
|
||||
/**
|
||||
* Check if user account exist
|
||||
*
|
||||
* @param CheckAccountRequest $request
|
||||
* @return mixed
|
||||
*/
|
||||
public function check_account(CheckAccountRequest $request)
|
||||
{
|
||||
// Get User
|
||||
$user = User::whereEmail($request->email)
|
||||
->first();
|
||||
|
||||
if (! $user) {
|
||||
return response(__t('user_not_fount'), 404);
|
||||
}
|
||||
|
||||
return [
|
||||
'name' => $user->settings->name,
|
||||
'avatar' => $user->settings->avatar,
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace App\Users\Controllers;
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Providers\RouteServiceProvider;
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace App\Users\Controllers;
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace App\Users\Controllers;
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Providers\RouteServiceProvider;
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace App\Users\Controllers;
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace App\Users\Controllers;
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Providers\RouteServiceProvider;
|
||||
215
app/Http/Controllers/FileManager/BrowseController.php
Normal file
215
app/Http/Controllers/FileManager/BrowseController.php
Normal file
@@ -0,0 +1,215 @@
|
||||
<?php
|
||||
namespace App\Http\Controllers\FileManager;
|
||||
|
||||
use App\Models\File;
|
||||
use App\Models\User;
|
||||
use App\Models\Share;
|
||||
use App\Models\Folder;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Collection;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use App\Http\Requests\FileBrowser\SearchRequest;
|
||||
|
||||
class BrowseController extends Controller
|
||||
{
|
||||
/**
|
||||
* Get directory with files
|
||||
*
|
||||
* @param Request $request
|
||||
* @param $id
|
||||
* @return Collection
|
||||
*/
|
||||
public function folder(Request $request, $id)
|
||||
{
|
||||
$root_id = $id === 'undefined' ? null : $id;
|
||||
|
||||
// Get folder trash items
|
||||
if ($request->query('trash')) {
|
||||
// Get folders and files
|
||||
$folders = Folder::onlyTrashed()
|
||||
->with('parent')
|
||||
->where('parent_id', $root_id)
|
||||
->sortable()
|
||||
->get();
|
||||
|
||||
$files = File::onlyTrashed()
|
||||
->with('parent')
|
||||
->where('folder_id', $root_id)
|
||||
->sortable()
|
||||
->get();
|
||||
|
||||
// Collect folders and files to single array
|
||||
return collect([$folders, $files])->collapse();
|
||||
}
|
||||
|
||||
// Get folders and files
|
||||
$folders = Folder::with(['parent:id,name', 'shared:token,id,item_id,permission,is_protected,expire_in'])
|
||||
->where('parent_id', $root_id)
|
||||
->where('user_id', Auth::id())
|
||||
->sortable()
|
||||
->get();
|
||||
|
||||
$files = File::with(['parent:id,name', 'shared:token,id,item_id,permission,is_protected,expire_in'])
|
||||
->where('folder_id', $root_id)
|
||||
->where('user_id', Auth::id())
|
||||
->sortable()
|
||||
->get();
|
||||
|
||||
// Collect folders and files to single array
|
||||
return collect([$folders, $files])
|
||||
->collapse();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get latest user uploads
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function latest()
|
||||
{
|
||||
$user = User::with(['latest_uploads' => function ($query) {
|
||||
$query->sortable(['created_at' => 'desc']);
|
||||
}])
|
||||
->where('id', Auth::id())
|
||||
->first();
|
||||
|
||||
return $user->latest_uploads;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get trashed files
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
public function trash()
|
||||
{
|
||||
$user_id = Auth::id();
|
||||
|
||||
// Get folders and files
|
||||
$folders_trashed = Folder::onlyTrashed()
|
||||
->with(['trashed_folders', 'parent'])
|
||||
->where('user_id', $user_id)
|
||||
->get(['parent_id', 'id', 'name']);
|
||||
|
||||
$folders = Folder::onlyTrashed()
|
||||
->with(['parent'])
|
||||
->where('user_id', $user_id)
|
||||
->whereIn('id', filter_folders_ids($folders_trashed))
|
||||
->sortable()
|
||||
->get();
|
||||
|
||||
// Get files trashed
|
||||
$files_trashed = File::onlyTrashed()
|
||||
->with(['parent'])
|
||||
->where('user_id', $user_id)
|
||||
->where(function ($query) use ($folders_trashed) {
|
||||
$query->whereNull('folder_id');
|
||||
$query->orWhereNotIn('folder_id', array_values(array_unique(recursiveFind($folders_trashed->toArray(), 'id'))));
|
||||
})
|
||||
->sortable()
|
||||
->get();
|
||||
|
||||
// Collect folders and files to single array
|
||||
return collect([$folders, $files_trashed])
|
||||
->collapse();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get user shared items
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
public function shared()
|
||||
{
|
||||
$user_id = Auth::id();
|
||||
|
||||
// Get shared folders and files
|
||||
$folder_ids = Share::where('user_id', $user_id)
|
||||
->where('type', 'folder')
|
||||
->pluck('item_id');
|
||||
|
||||
$file_ids = Share::where('user_id', $user_id)
|
||||
->where('type', '!=', 'folder')
|
||||
->pluck('item_id');
|
||||
|
||||
// Get folders and files
|
||||
$folders = Folder::with(['parent', 'shared:token,id,item_id,permission,is_protected,expire_in'])
|
||||
->where('user_id', $user_id)
|
||||
->whereIn('id', $folder_ids)
|
||||
->sortable()
|
||||
->get();
|
||||
|
||||
$files = File::with(['parent', 'shared:token,id,item_id,permission,is_protected,expire_in'])
|
||||
->where('user_id', $user_id)
|
||||
->whereIn('id', $file_ids)
|
||||
->sortable()
|
||||
->get();
|
||||
|
||||
// Collect folders and files to single array
|
||||
return collect([$folders, $files])
|
||||
->collapse();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get participant uploads
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function participant_uploads()
|
||||
{
|
||||
return File::with(['parent'])
|
||||
->where('user_id', Auth::id())
|
||||
->whereAuthor('visitor')
|
||||
->sortable()
|
||||
->get();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get user folder tree
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function navigation_tree()
|
||||
{
|
||||
$folders = Folder::with('folders:id,parent_id,id,name')
|
||||
->where('parent_id', null)
|
||||
->where('user_id', Auth::id())
|
||||
->sortable()
|
||||
->get(['id', 'parent_id', 'id', 'name']);
|
||||
|
||||
return [
|
||||
[
|
||||
'name' => __t('home'),
|
||||
'location' => 'base',
|
||||
'folders' => $folders,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Search files
|
||||
*
|
||||
* @param SearchRequest $request
|
||||
* @return Collection
|
||||
*/
|
||||
public function search(SearchRequest $request)
|
||||
{
|
||||
$user_id = Auth::id();
|
||||
|
||||
$query = remove_accents($request->input('query'));
|
||||
|
||||
// Search files id db
|
||||
$searched_files = File::search($query)
|
||||
->where('user_id', $user_id)
|
||||
->get();
|
||||
|
||||
$searched_folders = Folder::search($query)
|
||||
->where('user_id', $user_id)
|
||||
->get();
|
||||
|
||||
// Collect folders and files to single array
|
||||
return collect([$searched_folders, $searched_files])
|
||||
->collapse();
|
||||
}
|
||||
}
|
||||
167
app/Http/Controllers/FileManager/EditItemsController.php
Normal file
167
app/Http/Controllers/FileManager/EditItemsController.php
Normal file
@@ -0,0 +1,167 @@
|
||||
<?php
|
||||
namespace App\Http\Controllers\FileManager;
|
||||
|
||||
use Exception;
|
||||
use App\Models\File;
|
||||
use App\Models\Folder;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Services\DemoService;
|
||||
use App\Services\HelperService;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\FileManagerService;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
||||
use App\Http\Requests\FileFunctions\UploadRequest;
|
||||
use App\Http\Requests\FileFunctions\MoveItemRequest;
|
||||
use App\Http\Requests\FileFunctions\DeleteItemRequest;
|
||||
use App\Http\Requests\FileFunctions\RenameItemRequest;
|
||||
use App\Http\Requests\FileFunctions\CreateFolderRequest;
|
||||
|
||||
class EditItemsController extends Controller
|
||||
{
|
||||
private $filemanager;
|
||||
private $helper;
|
||||
private $demo;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->filemanager = resolve(FileManagerService::class);
|
||||
$this->helper = resolve(HelperService::class);
|
||||
$this->demo = resolve(DemoService::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create new folder for authenticated master|editor user
|
||||
*
|
||||
* @param CreateFolderRequest $request
|
||||
* @return Folder|array|Model
|
||||
* @throws Exception
|
||||
*/
|
||||
public function create_folder(CreateFolderRequest $request)
|
||||
{
|
||||
if (is_demo_account('howdy@hi5ve.digital')) {
|
||||
return $this->demo->create_folder($request);
|
||||
}
|
||||
|
||||
// Create new folder
|
||||
return $this->filemanager->create_folder($request);
|
||||
}
|
||||
|
||||
/**
|
||||
* Rename item for authenticated master|editor user
|
||||
*
|
||||
* @param RenameItemRequest $request
|
||||
* @param $id
|
||||
* @return mixed
|
||||
* @throws Exception
|
||||
*/
|
||||
public function rename_item(RenameItemRequest $request, $id)
|
||||
{
|
||||
if (is_demo_account('howdy@hi5ve.digital')) {
|
||||
return $this->demo->rename_item($request, $id);
|
||||
}
|
||||
|
||||
// If request contain icon or color, then change it
|
||||
if ($request->filled('emoji') || $request->filled('color')) {
|
||||
$this->filemanager->edit_folder_properties($request, $id);
|
||||
}
|
||||
|
||||
// Rename Item
|
||||
return $this->filemanager->rename_item($request, $id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete item for authenticated master|editor user
|
||||
*
|
||||
* @param DeleteItemRequest $request
|
||||
* @return ResponseFactory|\Illuminate\Http\Response
|
||||
* @throws Exception
|
||||
*/
|
||||
public function delete_item(DeleteItemRequest $request)
|
||||
{
|
||||
abort_if(is_demo_account('howdy@hi5ve.digital'), 204, 'Done.');
|
||||
|
||||
foreach ($request->input('items') as $item) {
|
||||
$this->filemanager->delete_item($item, $item['id']);
|
||||
}
|
||||
|
||||
return response('Done', 204);
|
||||
}
|
||||
|
||||
/**
|
||||
* Upload file for authenticated master|editor user
|
||||
*
|
||||
* @param UploadRequest $request
|
||||
* @return array|Model|\Illuminate\Support\Facades\File
|
||||
* @throws Exception
|
||||
*/
|
||||
public function upload(UploadRequest $request)
|
||||
{
|
||||
if (is_demo_account('howdy@hi5ve.digital')) {
|
||||
return $this->demo->upload($request);
|
||||
}
|
||||
|
||||
return $this->filemanager->upload($request);
|
||||
}
|
||||
|
||||
/**
|
||||
* Move item for authenticated master|editor user
|
||||
*
|
||||
* @param MoveItemRequest $request
|
||||
* @return ResponseFactory|\Illuminate\Http\Response
|
||||
*/
|
||||
public function move(MoveItemRequest $request)
|
||||
{
|
||||
abort_if(is_demo_account('howdy@hi5ve.digital'), 204, 'Done.');
|
||||
|
||||
$this->filemanager->move($request, $request->to_id);
|
||||
|
||||
return response('Done!', 204);
|
||||
}
|
||||
|
||||
/**
|
||||
* User download folder via zip
|
||||
*
|
||||
* @param $id
|
||||
* @return string
|
||||
* @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
|
||||
*/
|
||||
public function zip_folder($id)
|
||||
{
|
||||
$folder = Folder::whereUserId(Auth::id())
|
||||
->where('id', $id);
|
||||
|
||||
if (! $folder->exists()) {
|
||||
abort(404, "Requested folder doesn't exists.");
|
||||
}
|
||||
|
||||
$zip = $this->filemanager->zip_folder($id);
|
||||
|
||||
return response([
|
||||
'url' => route('zip', $zip->id),
|
||||
'name' => $zip->basename,
|
||||
], 201);
|
||||
}
|
||||
|
||||
/**
|
||||
* User download multiple files via zip
|
||||
*
|
||||
* @param Request $request
|
||||
* @return string
|
||||
* @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
|
||||
*/
|
||||
public function zip_multiple_files(Request $request)
|
||||
{
|
||||
$files = File::whereUserId(Auth::id())
|
||||
->whereIn('id', $request->input('items'))
|
||||
->get();
|
||||
|
||||
$zip = $this->filemanager->zip_files($files);
|
||||
|
||||
return response([
|
||||
'url' => route('zip', $zip->id),
|
||||
'name' => $zip->basename,
|
||||
], 201);
|
||||
}
|
||||
}
|
||||
70
app/Http/Controllers/FileManager/FavouriteController.php
Normal file
70
app/Http/Controllers/FileManager/FavouriteController.php
Normal file
@@ -0,0 +1,70 @@
|
||||
<?php
|
||||
namespace App\Http\Controllers\FileManager;
|
||||
|
||||
use App\Models\Folder;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Services\DemoService;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
|
||||
class FavouriteController extends Controller
|
||||
{
|
||||
/**
|
||||
* FavouriteController constructor.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->demo = resolve(DemoService::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add folder to user favourites
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
// todo: pridat validator ako AddToFavouritesRequest
|
||||
|
||||
foreach ($request->folders as $id) {
|
||||
// Get user & folder
|
||||
$user = Auth::user();
|
||||
|
||||
if (is_demo($user->id)) {
|
||||
return $this->demo->favourites($user);
|
||||
}
|
||||
|
||||
// Add folder to user favourites
|
||||
$user
|
||||
->favouriteFolders()
|
||||
->syncWithoutDetaching($id);
|
||||
}
|
||||
|
||||
// Return updated favourites
|
||||
return response($user->favouriteFolders, 204);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove folder from user favourites
|
||||
*
|
||||
* @param $id
|
||||
* @return \Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response
|
||||
*/
|
||||
public function destroy($id)
|
||||
{
|
||||
// Get user
|
||||
$user = Auth::user();
|
||||
|
||||
if (is_demo($user->id)) {
|
||||
return $this->demo->favourites($user);
|
||||
}
|
||||
|
||||
// Remove folder from user favourites
|
||||
$user->favouriteFolders()->detach($id);
|
||||
|
||||
// Return updated favourites
|
||||
return response($user->favouriteFolders, 204);
|
||||
}
|
||||
}
|
||||
143
app/Http/Controllers/FileManager/FileAccessController.php
Normal file
143
app/Http/Controllers/FileManager/FileAccessController.php
Normal file
@@ -0,0 +1,143 @@
|
||||
<?php
|
||||
namespace App\Http\Controllers\FileManager;
|
||||
|
||||
use App\Models\Zip;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Services\HelperService;
|
||||
use App\Models\File as UserFile;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
class FileAccessController extends Controller
|
||||
{
|
||||
private $helper;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->helper = resolve(HelperService::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get avatar
|
||||
*
|
||||
* @param $basename
|
||||
* @return mixed
|
||||
* @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
|
||||
*/
|
||||
public function get_avatar($basename)
|
||||
{
|
||||
// Check if file exist
|
||||
if (! Storage::exists("/avatars/$basename")) {
|
||||
abort(404);
|
||||
}
|
||||
|
||||
// Return avatar
|
||||
return Storage::download("/avatars/$basename", $basename);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get system image
|
||||
*
|
||||
* @param $basename
|
||||
* @return mixed
|
||||
* @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
|
||||
*/
|
||||
public function get_system_image($basename)
|
||||
{
|
||||
// Check if file exist
|
||||
if (! Storage::exists("/system/$basename")) {
|
||||
abort(404);
|
||||
}
|
||||
|
||||
// Return avatar
|
||||
return Storage::download("/system/$basename", $basename);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get file
|
||||
*
|
||||
* @param Request $request
|
||||
* @param $filename
|
||||
* @return mixed
|
||||
* @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
|
||||
*/
|
||||
public function get_file(Request $request, $filename)
|
||||
{
|
||||
// Get file record
|
||||
$file = UserFile::withTrashed()
|
||||
->where('user_id', Auth::id())
|
||||
->where('basename', $filename)
|
||||
->firstOrFail();
|
||||
|
||||
// Check user permission
|
||||
/*if (!$request->user()->tokenCan('master')) {
|
||||
|
||||
// Get shared token
|
||||
$shared = get_shared($request->cookie('shared_token'));
|
||||
|
||||
// Check access to file
|
||||
$this->check_file_access($shared, $file);
|
||||
}*/
|
||||
|
||||
// Store user download size
|
||||
$request->user()->record_download(
|
||||
(int) $file->getRawOriginal('filesize')
|
||||
);
|
||||
|
||||
return $this->helper->download_file($file, Auth::id());
|
||||
}
|
||||
|
||||
/**
|
||||
* Get generated zip for user
|
||||
*
|
||||
* @param $id
|
||||
* @return \Symfony\Component\HttpFoundation\StreamedResponse
|
||||
*/
|
||||
public function get_zip($id)
|
||||
{
|
||||
$disk = Storage::disk('local');
|
||||
|
||||
$zip = Zip::whereId($id)
|
||||
->where('user_id', Auth::id())
|
||||
->firstOrFail();
|
||||
|
||||
$zip
|
||||
->user
|
||||
->record_download(
|
||||
$disk->size("zip/$zip->basename")
|
||||
);
|
||||
|
||||
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-Disposition' => "attachment; filename=$zip->basename",
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get image thumbnail
|
||||
*
|
||||
* @param Request $request
|
||||
* @param $filename
|
||||
* @return mixed
|
||||
* @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
|
||||
*/
|
||||
public function get_thumbnail(Request $request, $filename)
|
||||
{
|
||||
// Get file record
|
||||
$file = UserFile::withTrashed()
|
||||
->whereUserId(Auth::id())
|
||||
->whereThumbnail($filename)
|
||||
->firstOrFail();
|
||||
|
||||
// Check user permission
|
||||
/*if (!$request->user()->tokenCan('master')) {
|
||||
$this->check_file_access($request, $file);
|
||||
}*/
|
||||
|
||||
return $this->helper->download_thumbnail_file($file, Auth::id());
|
||||
}
|
||||
}
|
||||
148
app/Http/Controllers/FileManager/ShareController.php
Normal file
148
app/Http/Controllers/FileManager/ShareController.php
Normal file
@@ -0,0 +1,148 @@
|
||||
<?php
|
||||
namespace App\Http\Controllers\FileManager;
|
||||
|
||||
use Validator;
|
||||
use App\Models\Zip;
|
||||
use App\Models\Share;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use App\Http\Resources\ShareResource;
|
||||
use App\Notifications\SharedSendViaEmail;
|
||||
use Illuminate\Support\Facades\Notification;
|
||||
use App\Http\Requests\Share\CreateShareRequest;
|
||||
use App\Http\Requests\Share\UpdateShareRequest;
|
||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
||||
|
||||
class ShareController extends Controller
|
||||
{
|
||||
/**
|
||||
* Get shared record
|
||||
*
|
||||
* @param Share $shared
|
||||
* @return ShareResource
|
||||
*/
|
||||
public function show(Share $shared)
|
||||
{
|
||||
return new ShareResource(
|
||||
$shared
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate file share link
|
||||
*
|
||||
* @param CreateShareRequest $request
|
||||
* @param $id
|
||||
* @return ShareResource
|
||||
*/
|
||||
public function store(CreateShareRequest $request, $id)
|
||||
{
|
||||
// Create shared options
|
||||
$shared = Share::create([
|
||||
'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(),
|
||||
]);
|
||||
|
||||
// Send shared link via email
|
||||
if ($request->has('emails')) {
|
||||
foreach ($request->emails as $email) {
|
||||
Notification::route('mail', $email)->notify(
|
||||
new SharedSendViaEmail($shared->token)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Return created shared record
|
||||
return new ShareResource($shared);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update sharing
|
||||
*
|
||||
* @param UpdateShareRequest $request
|
||||
* @param $token
|
||||
* @return ShareResource
|
||||
*/
|
||||
public function update(UpdateShareRequest $request, $token)
|
||||
{
|
||||
// Get sharing record
|
||||
$shared = Share::where('token', $token)
|
||||
->where('user_id', Auth::id())
|
||||
->firstOrFail();
|
||||
|
||||
// Update sharing record
|
||||
$shared->update([
|
||||
'permission' => $request->permission,
|
||||
'is_protected' => $request->protected,
|
||||
'expire_in' => $request->expiration,
|
||||
'password' => $request->password ? bcrypt($request->password) : $shared->password,
|
||||
]);
|
||||
|
||||
// Return shared record
|
||||
return new ShareResource($shared);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete sharing item
|
||||
*
|
||||
* @param Request $request
|
||||
* @return ResponseFactory|\Illuminate\Http\Response
|
||||
*/
|
||||
public function destroy(Request $request)
|
||||
{
|
||||
foreach ($request->tokens as $token) {
|
||||
// Get sharing record
|
||||
Share::where('token', $token)
|
||||
->where('user_id', Auth::id())
|
||||
->firstOrFail()
|
||||
->delete();
|
||||
|
||||
// Get zip record
|
||||
$zip = Zip::where('shared_token', $token)
|
||||
->where('user_id', Auth::id())
|
||||
->first();
|
||||
|
||||
if ($zip) {
|
||||
$zip->delete();
|
||||
}
|
||||
}
|
||||
|
||||
return response('Done!', 204);
|
||||
}
|
||||
|
||||
/**
|
||||
* Send shared link via email to recipients
|
||||
*
|
||||
* @param $token
|
||||
* @param $request
|
||||
*/
|
||||
public function send_to_emails_recipients(Request $request, $token)
|
||||
{
|
||||
// TODO: pridat validation request
|
||||
// Make validation of array of emails
|
||||
$validator = Validator::make($request->all(), [
|
||||
'emails.*' => 'required|email',
|
||||
]);
|
||||
|
||||
// Return error
|
||||
if ($validator->fails()) {
|
||||
abort(400, 'Bad email input');
|
||||
}
|
||||
|
||||
// Send shared link via email
|
||||
if ($request->has('emails')) {
|
||||
foreach ($request->emails as $email) {
|
||||
Notification::route('mail', $email)
|
||||
->notify(new SharedSendViaEmail($token));
|
||||
}
|
||||
}
|
||||
|
||||
return response('Done!', 204);
|
||||
}
|
||||
}
|
||||
121
app/Http/Controllers/FileManager/TrashController.php
Normal file
121
app/Http/Controllers/FileManager/TrashController.php
Normal file
@@ -0,0 +1,121 @@
|
||||
<?php
|
||||
namespace App\Http\Controllers\FileManager;
|
||||
|
||||
use App\Models\File;
|
||||
use App\Models\Folder;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Services\DemoService;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
||||
|
||||
class TrashController extends Controller
|
||||
{
|
||||
/**
|
||||
* TrashController constructor.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->demo = resolve(DemoService::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Restore item from trash
|
||||
*
|
||||
* @param Request $request
|
||||
* @return ResponseFactory|\Illuminate\Http\Response
|
||||
*/
|
||||
public function restore(Request $request)
|
||||
{
|
||||
// Validate request
|
||||
// TODO: zrefaktorovat validator do requestu
|
||||
$validator = Validator::make($request->input('items'), [
|
||||
'*.type' => 'required|string',
|
||||
'*.id' => 'string',
|
||||
]);
|
||||
|
||||
// Return error
|
||||
if ($validator->fails()) {
|
||||
abort(400, 'Bad input');
|
||||
}
|
||||
|
||||
// Get user id
|
||||
$user_id = Auth::id();
|
||||
|
||||
abort_if(is_demo_account('howdy@hi5ve.digital'), 204, 'Done.');
|
||||
|
||||
foreach ($request->input('items') as $restore) {
|
||||
// Get folder
|
||||
if ($restore['type'] === 'folder') {
|
||||
// Get folder
|
||||
$item = Folder::onlyTrashed()
|
||||
->where('user_id', $user_id)
|
||||
->where('id', $restore['id'])
|
||||
->first();
|
||||
|
||||
// Restore item to home directory
|
||||
if ($request->has('to_home') && $request->to_home) {
|
||||
$item->parent_id = null;
|
||||
$item->save();
|
||||
}
|
||||
} else {
|
||||
// Get item
|
||||
$item = File::onlyTrashed()
|
||||
->where('user_id', $user_id)
|
||||
->where('id', $restore['id'])
|
||||
->first();
|
||||
|
||||
// Restore item to home directory
|
||||
if ($request->has('to_home') && $request->to_home) {
|
||||
$item->folder_id = null;
|
||||
$item->save();
|
||||
}
|
||||
}
|
||||
|
||||
// Restore Item
|
||||
$item->restore();
|
||||
}
|
||||
|
||||
// Return response
|
||||
return response('Done!', 204);
|
||||
}
|
||||
|
||||
/**
|
||||
* Empty user trash
|
||||
*
|
||||
* @return ResponseFactory|\Illuminate\Http\Response
|
||||
*/
|
||||
public function dump()
|
||||
{
|
||||
// Get user id
|
||||
$user_id = Auth::id();
|
||||
|
||||
abort_if(is_demo_account('howdy@hi5ve.digital'), 204, 'Done.');
|
||||
|
||||
// Get files and folders
|
||||
$folders = Folder::onlyTrashed()->where('user_id', $user_id)->get();
|
||||
$files = File::onlyTrashed()->where('user_id', $user_id)->get();
|
||||
|
||||
// Force delete folder
|
||||
$folders->each->forceDelete();
|
||||
|
||||
// Force delete files
|
||||
foreach ($files as $file) {
|
||||
// Delete file
|
||||
Storage::delete("/files/$user_id/{$file->basename}");
|
||||
|
||||
// Delete thumbnail if exist
|
||||
if ($file->thumbnail) {
|
||||
Storage::delete("/files/$user_id/{$file->getRawOriginal('thumbnail')}");
|
||||
}
|
||||
|
||||
// Delete file permanently
|
||||
$file->forceDelete();
|
||||
}
|
||||
|
||||
// Return response
|
||||
return response('Done!', 204);
|
||||
}
|
||||
}
|
||||
125
app/Http/Controllers/Oasis/AdminController.php
Normal file
125
app/Http/Controllers/Oasis/AdminController.php
Normal 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);
|
||||
}
|
||||
}
|
||||
135
app/Http/Controllers/Oasis/SubscriptionController.php
Normal file
135
app/Http/Controllers/Oasis/SubscriptionController.php
Normal 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);
|
||||
}
|
||||
}
|
||||
248
app/Http/Controllers/Sharing/BrowseShareController.php
Normal file
248
app/Http/Controllers/Sharing/BrowseShareController.php
Normal file
@@ -0,0 +1,248 @@
|
||||
<?php
|
||||
namespace App\Http\Controllers\Sharing;
|
||||
|
||||
use App\Models\File;
|
||||
use App\Models\Share;
|
||||
use App\Models\Folder;
|
||||
use Illuminate\Support\Arr;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Services\HelperService;
|
||||
use Illuminate\Support\Collection;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Resources\FileResource;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use App\Http\Resources\ShareResource;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use App\Http\Requests\Share\AuthenticateShareRequest;
|
||||
|
||||
class BrowseShareController extends Controller
|
||||
{
|
||||
private $helper;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->helper = resolve(HelperService::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show page index and delete access_token & shared_token cookie
|
||||
* @param Share $shared
|
||||
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Symfony\Component\HttpFoundation\StreamedResponse
|
||||
*/
|
||||
public function index(Share $shared)
|
||||
{
|
||||
// Delete share_session if exist
|
||||
if ($shared->is_protected) {
|
||||
cookie()->queue('share_session', '', -1);
|
||||
}
|
||||
|
||||
// Check if shared is image file and then show it
|
||||
if ($shared->type === 'file' && ! $shared->is_protected) {
|
||||
$image = File::whereUserId($shared->user_id)
|
||||
->whereType('image')
|
||||
->whereId($shared->item_id)
|
||||
->first();
|
||||
|
||||
if ($image) {
|
||||
// Store user download size
|
||||
$shared
|
||||
->user
|
||||
->record_download(
|
||||
(int) $image->getRawOriginal('filesize')
|
||||
);
|
||||
|
||||
return $this->get_single_image($image, $shared->user_id);
|
||||
}
|
||||
}
|
||||
|
||||
return view('index')
|
||||
->with('installation', 'setup-done')
|
||||
->with('settings', get_settings_in_json() ?? null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check Password for protected item
|
||||
*
|
||||
* @param AuthenticateShareRequest $request
|
||||
* @param Share $shared
|
||||
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response
|
||||
*/
|
||||
public function authenticate(AuthenticateShareRequest $request, Share $shared)
|
||||
{
|
||||
// Check password
|
||||
if (Hash::check($request->password, $shared->password)) {
|
||||
$cookie = json_encode([
|
||||
'token' => $shared->token,
|
||||
'authenticated' => true,
|
||||
]);
|
||||
|
||||
// Return authorize token with shared options
|
||||
return response(new ShareResource($shared), 200)
|
||||
->cookie('share_session', $cookie, 43200);
|
||||
}
|
||||
|
||||
abort(401, __t('incorrect_password'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Browse shared folder
|
||||
*
|
||||
* @param $id
|
||||
* @param Share $shared
|
||||
* @return Collection
|
||||
*/
|
||||
public function browse_folder($id, Share $shared)
|
||||
{
|
||||
// Check ability to access protected share record
|
||||
$this->helper->check_protected_share_record($shared);
|
||||
|
||||
// Check if user can get directory
|
||||
$this->helper->check_item_access($id, $shared);
|
||||
|
||||
// Get files and folders
|
||||
list($folders, $files) = $this->helper->get_items_under_shared_by_folder_id($id, $shared);
|
||||
|
||||
// Set thumbnail links for public files
|
||||
$files->map(function ($file) use ($shared) {
|
||||
$file->setPublicUrl($shared->token);
|
||||
});
|
||||
|
||||
// Collect folders and files to single array
|
||||
return collect([$folders, $files])
|
||||
->collapse();
|
||||
}
|
||||
|
||||
/**
|
||||
* Search shared files
|
||||
*
|
||||
* @param Request $request
|
||||
* @param Share $shared
|
||||
* @return Collection
|
||||
*/
|
||||
public function search(Request $request, Share $shared)
|
||||
{
|
||||
// Check ability to access protected share record
|
||||
$this->helper->check_protected_share_record($shared);
|
||||
|
||||
$query = remove_accents(
|
||||
$request->input('query')
|
||||
);
|
||||
|
||||
// Search files id db
|
||||
$searched_files = File::search($query)
|
||||
->where('user_id', $shared->user_id)
|
||||
->get();
|
||||
$searched_folders = Folder::search($query)
|
||||
->where('user_id', $shared->user_id)
|
||||
->get();
|
||||
|
||||
// Get all children content
|
||||
$foldersIds = Folder::with('folders:id,parent_id,id,name')
|
||||
->where('user_id', $shared->user_id)
|
||||
->where('parent_id', $shared->item_id)
|
||||
->get();
|
||||
|
||||
// Get accessible folders
|
||||
$accessible_folder_ids = Arr::flatten([filter_folders_ids($foldersIds), $shared->item_id]);
|
||||
|
||||
// Filter files
|
||||
$files = $searched_files->filter(function ($file) use ($accessible_folder_ids, $shared) {
|
||||
// Set public urls
|
||||
$file->setPublicUrl($shared->token);
|
||||
|
||||
// check if item is in accessible folders
|
||||
return in_array($file->folder_id, $accessible_folder_ids);
|
||||
});
|
||||
|
||||
// Filter folders
|
||||
$folders = $searched_folders->filter(function ($folder) use ($accessible_folder_ids) {
|
||||
// check if item is in accessible folders
|
||||
return in_array($folder->id, $accessible_folder_ids);
|
||||
});
|
||||
|
||||
// Collect folders and files to single array
|
||||
return collect([$folders, $files])
|
||||
->collapse();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get navigation tree of shared folder
|
||||
*
|
||||
* @param Share $shared
|
||||
* @return array
|
||||
*/
|
||||
public function navigation_tree(Share $shared)
|
||||
{
|
||||
// Check ability to access protected share record
|
||||
$this->helper->check_protected_share_record($shared);
|
||||
|
||||
// Check if user can get directory
|
||||
$this->helper->check_item_access($shared->item_id, $shared);
|
||||
|
||||
// Get folders
|
||||
$folders = Folder::with('folders:id,parent_id,name')
|
||||
->whereParentId($shared->item_id)
|
||||
->whereUserId($shared->user_id)
|
||||
->sortable()
|
||||
->get(['id', 'parent_id', 'id', 'name']);
|
||||
|
||||
return [
|
||||
[
|
||||
'id' => $shared->item_id,
|
||||
'name' => __t('home'),
|
||||
'location' => 'public',
|
||||
'folders' => $folders,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get shared file record
|
||||
*
|
||||
* @param Share $shared
|
||||
* @return mixed
|
||||
*/
|
||||
public function get_single_file(Share $shared)
|
||||
{
|
||||
// Check ability to access protected share files
|
||||
$this->helper->check_protected_share_record($shared);
|
||||
|
||||
// Get file
|
||||
$file = File::whereUserId($shared->user_id)
|
||||
->whereId($shared->item_id)
|
||||
->firstOrFail();
|
||||
|
||||
// Set access urls
|
||||
$file->setPublicUrl($shared->token);
|
||||
|
||||
return response(new FileResource($file), 200);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get image from storage and show it
|
||||
*
|
||||
* @param $file
|
||||
* @param $user_id
|
||||
* @return \Symfony\Component\HttpFoundation\StreamedResponse
|
||||
*/
|
||||
private function get_single_image($file, $user_id)
|
||||
{
|
||||
// Format pretty filename
|
||||
$file_pretty_name = $file->name . '.' . $file->mimetype;
|
||||
|
||||
// Get file path
|
||||
$path = "/files/$user_id/$file->basename";
|
||||
|
||||
// Check if file exist
|
||||
if (! Storage::exists($path)) {
|
||||
abort(404);
|
||||
}
|
||||
|
||||
return Storage::response($path, $file_pretty_name, [
|
||||
'Content-Type' => Storage::mimeType($path),
|
||||
'Content-Length' => Storage::size($path),
|
||||
'Accept-Ranges' => 'bytes',
|
||||
'Content-Range' => 'bytes 0-600/' . Storage::size($path),
|
||||
]);
|
||||
}
|
||||
}
|
||||
110
app/Http/Controllers/Sharing/FileSharedAccessController.php
Normal file
110
app/Http/Controllers/Sharing/FileSharedAccessController.php
Normal file
@@ -0,0 +1,110 @@
|
||||
<?php
|
||||
namespace App\Http\Controllers\Sharing;
|
||||
|
||||
use App\Models\Zip;
|
||||
use App\Models\Share;
|
||||
use App\Services\HelperService;
|
||||
use App\Models\File as UserFile;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
class FileSharedAccessController extends Controller
|
||||
{
|
||||
private $helper;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->helper = resolve(HelperService::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get generated zip for guest
|
||||
*
|
||||
* @param $id
|
||||
* @param $token
|
||||
* @return \Symfony\Component\HttpFoundation\StreamedResponse
|
||||
*/
|
||||
public function get_zip_public($id, $token)
|
||||
{
|
||||
$disk = Storage::disk('local');
|
||||
|
||||
$zip = Zip::where('id', $id)
|
||||
->where('shared_token', $token)
|
||||
->first();
|
||||
|
||||
$zip
|
||||
->user
|
||||
->record_download(
|
||||
$disk->size("zip/$zip->basename")
|
||||
);
|
||||
|
||||
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-Disposition' => 'attachment; filename=' . $zip->basename,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get file public
|
||||
*
|
||||
* @param $filename
|
||||
* @param Share $shared
|
||||
* @return mixed
|
||||
*/
|
||||
public function get_file_public($filename, Share $shared)
|
||||
{
|
||||
// Check ability to access protected share files
|
||||
$this->helper->check_protected_share_record($shared);
|
||||
|
||||
// Get file record
|
||||
$file = UserFile::where('user_id', $shared->user_id)
|
||||
->where('basename', $filename)
|
||||
->firstOrFail();
|
||||
|
||||
// Check file access
|
||||
$this->helper->check_guest_access_to_shared_items($shared, $file);
|
||||
|
||||
// Store user download size
|
||||
$shared
|
||||
->user
|
||||
->record_download(
|
||||
(int) $file->getRawOriginal('filesize')
|
||||
);
|
||||
|
||||
return $this->helper->download_file($file, $shared->user_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get public image thumbnail
|
||||
*
|
||||
* @param $filename
|
||||
* @param Share $shared
|
||||
* @return mixed
|
||||
*/
|
||||
public function get_thumbnail_public($filename, Share $shared)
|
||||
{
|
||||
// Check ability to access protected share files
|
||||
$this->helper->check_protected_share_record($shared);
|
||||
|
||||
// Get file record
|
||||
$file = UserFile::where('user_id', $shared->user_id)
|
||||
->where('thumbnail', $filename)
|
||||
->firstOrFail();
|
||||
|
||||
// Check file access
|
||||
$this->helper->check_guest_access_to_shared_items($shared, $file);
|
||||
|
||||
// Store user download size
|
||||
$shared
|
||||
->user
|
||||
->record_download(
|
||||
(int) $file->getRawOriginal('filesize')
|
||||
);
|
||||
|
||||
return $this->helper->download_thumbnail_file($file, $shared->user_id);
|
||||
}
|
||||
}
|
||||
300
app/Http/Controllers/Sharing/ManipulateShareItemsController.php
Normal file
300
app/Http/Controllers/Sharing/ManipulateShareItemsController.php
Normal file
@@ -0,0 +1,300 @@
|
||||
<?php
|
||||
namespace App\Http\Controllers\Sharing;
|
||||
|
||||
use App\Models\File;
|
||||
use App\Models\Share;
|
||||
use App\Models\Folder;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Services\DemoService;
|
||||
use App\Services\HelperService;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\FileManagerService;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
||||
use App\Http\Requests\FileFunctions\UploadRequest;
|
||||
use App\Http\Requests\FileFunctions\MoveItemRequest;
|
||||
use App\Http\Requests\FileFunctions\DeleteItemRequest;
|
||||
use App\Http\Requests\FileFunctions\RenameItemRequest;
|
||||
use App\Http\Requests\FileFunctions\CreateFolderRequest;
|
||||
|
||||
class ManipulateShareItemsController extends Controller
|
||||
{
|
||||
private $filemanager;
|
||||
private $helper;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->filemanager = resolve(FileManagerService::class);
|
||||
$this->helper = resolve(HelperService::class);
|
||||
$this->demo = resolve(DemoService::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create new folder for guest user with edit permission
|
||||
*
|
||||
* @param CreateFolderRequest $request
|
||||
* @param Share $shared
|
||||
* @return array|\Illuminate\Contracts\Foundation\Application|ResponseFactory|\Illuminate\Http\Response
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function create_folder(CreateFolderRequest $request, Share $shared)
|
||||
{
|
||||
if (is_demo_account($shared->user->email)) {
|
||||
return $this->demo->create_folder($request);
|
||||
}
|
||||
|
||||
// Check ability to access protected share record
|
||||
$this->helper->check_protected_share_record($shared);
|
||||
|
||||
// Check shared permission
|
||||
if (is_visitor($shared)) {
|
||||
abort(403);
|
||||
}
|
||||
|
||||
// Check access to requested directory
|
||||
$this->helper->check_item_access($request->parent_id, $shared);
|
||||
|
||||
// Create folder
|
||||
$folder = $this->filemanager->create_folder($request, $shared);
|
||||
|
||||
return response($folder, 201);
|
||||
}
|
||||
|
||||
/**
|
||||
* Rename item for guest user with edit permission
|
||||
*
|
||||
* @param RenameItemRequest $request
|
||||
* @param $id
|
||||
* @param Share $shared
|
||||
* @return mixed
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function rename_item(RenameItemRequest $request, $id, Share $shared)
|
||||
{
|
||||
if (is_demo_account($shared->user->email)) {
|
||||
return $this->demo->rename_item($request, $id);
|
||||
}
|
||||
|
||||
// Check ability to access protected share record
|
||||
$this->helper->check_protected_share_record($shared);
|
||||
|
||||
// Check shared permission
|
||||
if (is_visitor($shared)) {
|
||||
abort(403);
|
||||
}
|
||||
|
||||
// Get file|folder item
|
||||
$item = get_item($request->type, $id);
|
||||
|
||||
// Check access to requested item
|
||||
if ($request->type === 'folder') {
|
||||
$this->helper->check_item_access($item->id, $shared);
|
||||
} else {
|
||||
$this->helper->check_item_access($item->folder_id, $shared);
|
||||
}
|
||||
|
||||
// If request have a change folder icon values set the folder icon
|
||||
if ($request->type === 'folder' && $request->filled('icon')) {
|
||||
$this->filemanager->edit_folder_properties($request, $id);
|
||||
}
|
||||
|
||||
// Rename item
|
||||
$item = $this->filemanager->rename_item($request, $id, $shared);
|
||||
|
||||
// Set public url
|
||||
if ($item->type !== 'folder') {
|
||||
$item->setPublicUrl($shared->token);
|
||||
}
|
||||
|
||||
return response($item, 201);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete item for guest user with edit permission
|
||||
*
|
||||
* @param DeleteItemRequest $request
|
||||
* @param Share $shared
|
||||
* @return ResponseFactory|\Illuminate\Http\Response
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function delete_item(DeleteItemRequest $request, Share $shared)
|
||||
{
|
||||
abort_if(is_demo_account($shared->user->email), 204, 'Done.');
|
||||
|
||||
// Check ability to access protected share record
|
||||
$this->helper->check_protected_share_record($shared);
|
||||
|
||||
// Check shared permission
|
||||
if (is_visitor($shared)) {
|
||||
abort(403);
|
||||
}
|
||||
|
||||
foreach ($request->items as $file) {
|
||||
// Get file|folder item
|
||||
$item = get_item($file['type'], $file['id']);
|
||||
|
||||
// Check access to requested item
|
||||
if ($file['type'] === 'folder') {
|
||||
$this->helper->check_item_access($item->id, $shared);
|
||||
} else {
|
||||
$this->helper->check_item_access($item->folder_id, $shared);
|
||||
}
|
||||
|
||||
// Delete item
|
||||
$this->filemanager->delete_item($file, $file['id'], $shared);
|
||||
}
|
||||
|
||||
return response('Done', 204);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete file for guest user with edit permission
|
||||
*
|
||||
* @param UploadRequest $request
|
||||
* @param Share $shared
|
||||
* @return File|\Illuminate\Contracts\Foundation\Application|ResponseFactory|Model|\Illuminate\Http\Response
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function upload(UploadRequest $request, Share $shared)
|
||||
{
|
||||
if (is_demo_account($shared->user->email)) {
|
||||
return $this->demo->upload($request);
|
||||
}
|
||||
|
||||
// Check ability to access protected share record
|
||||
$this->helper->check_protected_share_record($shared);
|
||||
|
||||
// Check shared permission
|
||||
if (is_visitor($shared)) {
|
||||
abort(403);
|
||||
}
|
||||
|
||||
// Check access to requested directory
|
||||
$this->helper->check_item_access($request->folder_id, $shared);
|
||||
|
||||
// Return new uploaded file
|
||||
$new_file = $this->filemanager->upload($request, $shared);
|
||||
|
||||
// Set public access url
|
||||
$new_file->setPublicUrl($shared->token);
|
||||
|
||||
return response($new_file, 201);
|
||||
}
|
||||
|
||||
/**
|
||||
* Move item for guest user with edit permission
|
||||
*
|
||||
* @param MoveItemRequest $request
|
||||
* @param Share $shared
|
||||
* @return ResponseFactory|\Illuminate\Http\Response
|
||||
*/
|
||||
public function move(MoveItemRequest $request, Share $shared)
|
||||
{
|
||||
abort_if(is_demo_account($shared->user->email), 204, 'Done.');
|
||||
|
||||
// Check ability to access protected share record
|
||||
$this->helper->check_protected_share_record($shared);
|
||||
|
||||
// Check shared permission
|
||||
if (is_visitor($shared)) {
|
||||
abort(403);
|
||||
}
|
||||
|
||||
foreach ($request->items as $item) {
|
||||
if ($item['type'] === 'folder') {
|
||||
$this->helper->check_item_access([
|
||||
$request->to_id, $item['id'],
|
||||
], $shared);
|
||||
}
|
||||
|
||||
if ($item['type'] !== 'folder') {
|
||||
$file = File::where('id', $item['id'])
|
||||
->where('user_id', $shared->user_id)
|
||||
->firstOrFail();
|
||||
|
||||
$this->helper->check_item_access([
|
||||
$request->to_id, $file->folder_id,
|
||||
], $shared);
|
||||
}
|
||||
}
|
||||
|
||||
$this->filemanager->move($request, $request->to_id);
|
||||
|
||||
return response('Done!', 204);
|
||||
}
|
||||
|
||||
/**
|
||||
* Guest download folder via zip
|
||||
*
|
||||
* @param $id
|
||||
* @param Share $shared
|
||||
* @return string
|
||||
* @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
|
||||
*/
|
||||
public function zip_folder($id, Share $shared)
|
||||
{
|
||||
// Check ability to access protected share record
|
||||
$this->helper->check_protected_share_record($shared);
|
||||
|
||||
// Check access to requested folder
|
||||
$this->helper->check_item_access($id, $shared);
|
||||
|
||||
// Get folder
|
||||
$folder = Folder::whereUserId($shared->user_id)
|
||||
->where('id', $id);
|
||||
|
||||
if (! $folder->exists()) {
|
||||
abort(404, 'Requested folder doesn\'t exists.');
|
||||
}
|
||||
|
||||
$zip = $this->filemanager->zip_folder($id, $shared);
|
||||
|
||||
// Get file
|
||||
return response([
|
||||
'url' => route('zip_public', [
|
||||
'id' => $zip->id,
|
||||
'token' => $shared->token,
|
||||
]),
|
||||
'name' => $zip->basename,
|
||||
], 201);
|
||||
}
|
||||
|
||||
/**
|
||||
* Guest download multiple files via zip
|
||||
*
|
||||
* @param Request $request
|
||||
* @param Share $shared
|
||||
* @return string
|
||||
* @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
|
||||
*/
|
||||
public function zip_multiple_files(Request $request, Share $shared)
|
||||
{
|
||||
// Check ability to access protected share record
|
||||
$this->helper->check_protected_share_record($shared);
|
||||
|
||||
$file_parent_folders = File::whereUserId($shared->user_id)
|
||||
->whereIn('id', $request->items)
|
||||
->get()
|
||||
->pluck('folder_id')
|
||||
->toArray();
|
||||
|
||||
// Check access to requested directory
|
||||
$this->helper->check_item_access($file_parent_folders, $shared);
|
||||
|
||||
// Get requested files
|
||||
$files = File::whereUserId($shared->user_id)
|
||||
->whereIn('id', $request->items)
|
||||
->get();
|
||||
|
||||
$zip = $this->filemanager->zip_files($files, $shared);
|
||||
|
||||
// Get file
|
||||
return response([
|
||||
'url' => route('zip_public', [
|
||||
'id' => $zip->id,
|
||||
'token' => $shared->token,
|
||||
]),
|
||||
'name' => $zip->basename,
|
||||
], 201);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
<?php
|
||||
namespace App\Http\Controllers\Subscription;
|
||||
|
||||
use App\Models\User;
|
||||
use App\Services\StripeService;
|
||||
use Laravel\Cashier\Http\Controllers\WebhookController as CashierController;
|
||||
|
||||
class StripeWebhookController extends CashierController
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->stripe = resolve(StripeService::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle a cancelled customer from a Stripe subscription.
|
||||
*
|
||||
* @param array $payload
|
||||
* @return \Symfony\Component\HttpFoundation\Response
|
||||
*/
|
||||
public function handleCustomerSubscriptionDeleted($payload)
|
||||
{
|
||||
if ($user = $this->getUserByStripeId($payload['data']['object']['customer'])) {
|
||||
$user->subscriptions->filter(function ($subscription) use ($payload) {
|
||||
return $subscription->stripe_id === $payload['data']['object']['id'];
|
||||
})->each(function ($subscription) {
|
||||
$subscription->markAsCancelled();
|
||||
});
|
||||
}
|
||||
|
||||
// Get user
|
||||
$user = User::whereStripeId($payload['data']['object']['customer'])
|
||||
->firstOrFail();
|
||||
|
||||
// Update storage capacity
|
||||
$user
|
||||
->settings()
|
||||
->update([
|
||||
'storage_capacity' => get_setting('storage_default'),
|
||||
]);
|
||||
|
||||
return $this->successMethod();
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle Invoice Payment Succeeded
|
||||
*
|
||||
* @param $payload
|
||||
* @return \Symfony\Component\HttpFoundation\Response
|
||||
*/
|
||||
public function handleInvoicePaymentSucceeded($payload)
|
||||
{
|
||||
// Get user
|
||||
$user = User::whereStripeId($payload['data']['object']['customer'])
|
||||
->firstOrFail();
|
||||
|
||||
// Get requested plan
|
||||
$plan = $this->stripe->getPlan($user->subscription('main')->stripe_plan);
|
||||
|
||||
// Update user storage limit
|
||||
$user
|
||||
->settings()
|
||||
->update([
|
||||
'storage_capacity' => $plan['product']['metadata']['capacity'],
|
||||
]);
|
||||
|
||||
return $this->successMethod();
|
||||
}
|
||||
}
|
||||
128
app/Http/Controllers/User/AccountController.php
Normal file
128
app/Http/Controllers/User/AccountController.php
Normal file
@@ -0,0 +1,128 @@
|
||||
<?php
|
||||
namespace App\Http\Controllers\User;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Services\DemoService;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Resources\UserResource;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use App\Http\Resources\InvoiceCollection;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use App\Http\Resources\UserStorageResource;
|
||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
||||
use App\Http\Requests\User\UpdateUserPasswordRequest;
|
||||
|
||||
class AccountController extends Controller
|
||||
{
|
||||
/**
|
||||
* AccountController constructor.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->demo = resolve(DemoService::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all user data to frontend
|
||||
*
|
||||
* @return UserResource
|
||||
*/
|
||||
public function user()
|
||||
{
|
||||
return new UserResource(
|
||||
Auth::user()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get storage details
|
||||
*
|
||||
* @return UserStorageResource
|
||||
*/
|
||||
public function storage()
|
||||
{
|
||||
return new UserStorageResource(
|
||||
Auth::user()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get user invoices
|
||||
*
|
||||
* @return InvoiceCollection
|
||||
*/
|
||||
public function invoices()
|
||||
{
|
||||
return new InvoiceCollection(
|
||||
Auth::user()->invoices()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update user settings relationship
|
||||
*
|
||||
* @param Request $request
|
||||
* @return ResponseFactory|\Illuminate\Http\Response
|
||||
*/
|
||||
public function update_user_settings(Request $request)
|
||||
{
|
||||
// Validate request
|
||||
// TODO: pridat validator do requestu
|
||||
$validator = Validator::make($request->all(), [
|
||||
'avatar' => 'sometimes|file',
|
||||
'name' => 'string',
|
||||
'value' => 'string',
|
||||
]);
|
||||
|
||||
// Return error
|
||||
if ($validator->fails()) {
|
||||
abort(400, 'Bad input');
|
||||
}
|
||||
|
||||
// Get user
|
||||
$user = Auth::user();
|
||||
|
||||
// Check if is demo
|
||||
abort_if(is_demo_account('howdy@hi5ve.digital'), 204, 'Done.');
|
||||
|
||||
// Update avatar
|
||||
if ($request->hasFile('avatar')) {
|
||||
$user
|
||||
->settings()
|
||||
->update([
|
||||
'avatar' => store_avatar($request, 'avatar'),
|
||||
]);
|
||||
|
||||
return response('Saved!', 204);
|
||||
}
|
||||
|
||||
$user
|
||||
->settings()
|
||||
->update(
|
||||
make_single_input($request)
|
||||
);
|
||||
|
||||
return response('Saved!', 204);
|
||||
}
|
||||
|
||||
/**
|
||||
* Change user password
|
||||
*
|
||||
* @param Request $request
|
||||
* @return ResponseFactory|\Illuminate\Http\Response
|
||||
*/
|
||||
public function change_password(UpdateUserPasswordRequest $request)
|
||||
{
|
||||
// Get user
|
||||
$user = Auth::user();
|
||||
|
||||
// Check if is demo
|
||||
abort_if(is_demo_account('howdy@hi5ve.digital'), 204, 'Done.');
|
||||
|
||||
// Change and store new password
|
||||
$user->password = bcrypt($request->input('password'));
|
||||
$user->save();
|
||||
|
||||
return response('Changed!', 204);
|
||||
}
|
||||
}
|
||||
164
app/Http/Controllers/User/PaymentMethodsController.php
Normal file
164
app/Http/Controllers/User/PaymentMethodsController.php
Normal file
@@ -0,0 +1,164 @@
|
||||
<?php
|
||||
namespace App\Http\Controllers\User;
|
||||
|
||||
use Auth;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Services\DemoService;
|
||||
use App\Services\StripeService;
|
||||
use Laravel\Cashier\PaymentMethod;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use App\Http\Resources\PaymentCardResource;
|
||||
use App\Http\Resources\PaymentCardCollection;
|
||||
use App\Http\Resources\PaymentDefaultCardResource;
|
||||
use App\Http\Requests\Payments\RegisterNewPaymentMethodRequest;
|
||||
|
||||
class PaymentMethodsController extends Controller
|
||||
{
|
||||
private StripeService $stripe;
|
||||
|
||||
private DemoService $demo;
|
||||
|
||||
public function __construct(StripeService $stripe)
|
||||
{
|
||||
$this->stripe = $stripe;
|
||||
$this->demo = resolve(DemoService::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get user payment methods grouped by default and others
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$user = Auth::user();
|
||||
|
||||
if (! $user->hasPaymentMethod()) {
|
||||
return abort(204, 'User don\'t have any payment methods');
|
||||
}
|
||||
|
||||
$slug_payment_methods = 'payment-methods-user-' . $user->id;
|
||||
$slug_default_payment_method = 'default-payment-methods-user-' . $user->id;
|
||||
|
||||
if (Cache::has($slug_payment_methods) && Cache::has($slug_default_payment_method)) {
|
||||
$defaultPaymentMethod = Cache::get($slug_default_payment_method);
|
||||
$paymentMethodsMapped = Cache::get($slug_payment_methods);
|
||||
} else {
|
||||
// Get default payment method
|
||||
$defaultPaymentMethod = Cache::rememberForever($slug_default_payment_method, function () use ($user) {
|
||||
$defaultPaymentMethodObject = $user->defaultPaymentMethod();
|
||||
|
||||
return $defaultPaymentMethodObject instanceof PaymentMethod
|
||||
? $defaultPaymentMethodObject->asStripePaymentMethod()
|
||||
: $defaultPaymentMethodObject;
|
||||
});
|
||||
|
||||
// filter payment methods without default payment
|
||||
$paymentMethodsMapped = Cache::rememberForever($slug_payment_methods, function () use ($defaultPaymentMethod, $user) {
|
||||
$paymentMethods = $user->paymentMethods()->filter(function ($paymentMethod) use ($defaultPaymentMethod) {
|
||||
return $paymentMethod->id !== $defaultPaymentMethod->id;
|
||||
});
|
||||
|
||||
// Get payment methods
|
||||
return $paymentMethods->map(function ($paymentMethod) {
|
||||
return $paymentMethod->asStripePaymentMethod();
|
||||
})->values()->all();
|
||||
});
|
||||
}
|
||||
|
||||
if (! $user->card_brand || ! $user->stripe_id || is_null($paymentMethodsMapped) && is_null($paymentMethodsMapped)) {
|
||||
return [
|
||||
'default' => null,
|
||||
'others' => [],
|
||||
];
|
||||
}
|
||||
|
||||
return [
|
||||
'default' => $defaultPaymentMethod instanceof PaymentMethod
|
||||
? new PaymentCardResource($defaultPaymentMethod)
|
||||
: new PaymentDefaultCardResource($defaultPaymentMethod),
|
||||
'others' => new PaymentCardCollection($paymentMethodsMapped),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Update default payment method
|
||||
*
|
||||
* @param Request $request
|
||||
* @param $id
|
||||
* @return \Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response
|
||||
*/
|
||||
public function update($id)
|
||||
{
|
||||
$user = Auth::user();
|
||||
|
||||
// Check if is demo
|
||||
abort_if(is_demo_account('howdy@hi5ve.digital'), 204, 'Done.');
|
||||
|
||||
// Update DefaultPayment Method
|
||||
$user->updateDefaultPaymentMethod($id);
|
||||
|
||||
// Sync default payment method
|
||||
$user->updateDefaultPaymentMethodFromStripe();
|
||||
|
||||
// Clear cached payment methods
|
||||
cache_forget_many([
|
||||
'payment-methods-user-' . $user->id,
|
||||
'default-payment-methods-user-' . $user->id,
|
||||
]);
|
||||
|
||||
return response('Done', 204);
|
||||
}
|
||||
|
||||
/**
|
||||
* Register new payment method for user
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response
|
||||
*/
|
||||
public function store(RegisterNewPaymentMethodRequest $request)
|
||||
{
|
||||
// Get user
|
||||
$user = Auth::user();
|
||||
|
||||
// Check if is demo
|
||||
if (is_demo($user->id)) {
|
||||
return response('Done', 201);
|
||||
}
|
||||
|
||||
// Register new payment method
|
||||
$this->stripe->registerNewPaymentMethod($request, $user);
|
||||
|
||||
return response('Done', 201);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete user payment method
|
||||
*
|
||||
*/
|
||||
public function delete($id)
|
||||
{
|
||||
$user = Auth::user();
|
||||
|
||||
// Check if is demo
|
||||
abort_if(is_demo_account('howdy@hi5ve.digital'), 204, 'Done.');
|
||||
|
||||
// Get payment method
|
||||
$paymentMethod = $user->findPaymentMethod($id);
|
||||
|
||||
// Delete payment method
|
||||
$paymentMethod->delete();
|
||||
|
||||
// Sync default payment method
|
||||
$user->updateDefaultPaymentMethodFromStripe();
|
||||
|
||||
// Clear cached payment methods
|
||||
cache_forget_many([
|
||||
'payment-methods-user-' . $user->id,
|
||||
'default-payment-methods-user-' . $user->id,
|
||||
]);
|
||||
|
||||
return response('Done!', 204);
|
||||
}
|
||||
}
|
||||
151
app/Http/Controllers/User/SubscriptionController.php
Normal file
151
app/Http/Controllers/User/SubscriptionController.php
Normal file
@@ -0,0 +1,151 @@
|
||||
<?php
|
||||
namespace App\Http\Controllers\User;
|
||||
|
||||
use Auth;
|
||||
use App\Models\User;
|
||||
use Stripe\SetupIntent;
|
||||
use App\Services\DemoService;
|
||||
use Illuminate\Http\Response;
|
||||
use App\Services\StripeService;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use App\Http\Resources\UserSubscription;
|
||||
use Illuminate\Contracts\Foundation\Application;
|
||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
||||
use App\Http\Requests\Subscription\StoreUpgradeAccountRequest;
|
||||
|
||||
class SubscriptionController extends Controller
|
||||
{
|
||||
private $stripe;
|
||||
private $demo;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->stripe = resolve(StripeService::class);
|
||||
$this->demo = DemoService::class;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate setup intent
|
||||
*
|
||||
* @return Application|ResponseFactory|Response|SetupIntent
|
||||
*/
|
||||
public function setup_intent()
|
||||
{
|
||||
return response(
|
||||
$this->stripe->getSetupIntent(Auth::user()),
|
||||
201
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get user subscription detail
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function show()
|
||||
{
|
||||
$user = User::find(Auth::id());
|
||||
|
||||
if (! $user->subscription('main')) {
|
||||
return abort(204, 'User don\'t have any subscription');
|
||||
}
|
||||
|
||||
$slug = 'subscription-user-' . $user->id;
|
||||
|
||||
if (Cache::has($slug)) {
|
||||
return Cache::get($slug);
|
||||
}
|
||||
|
||||
return Cache::rememberForever($slug, function () use ($user) {
|
||||
return new UserSubscription(
|
||||
$user
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Upgrade account to subscription
|
||||
*
|
||||
* @param StoreUpgradeAccountRequest $request
|
||||
* @return ResponseFactory|Response
|
||||
*/
|
||||
public function upgrade(StoreUpgradeAccountRequest $request)
|
||||
{
|
||||
// Get user
|
||||
$user = Auth::user();
|
||||
|
||||
// Check if is demo
|
||||
if (is_demo($user->id)) {
|
||||
return $this->demo->response_204();
|
||||
}
|
||||
|
||||
// Forget user subscription
|
||||
Cache::forget('subscription-user-' . $user->id);
|
||||
|
||||
// Get requested plan
|
||||
$plan = $this->stripe->getPlan($request->input('plan.data.id'));
|
||||
|
||||
// Set user billing
|
||||
$user->setBilling($request->input('billing'));
|
||||
|
||||
// Update stripe customer billing info
|
||||
$this->stripe->updateCustomerDetails($user);
|
||||
|
||||
// Make subscription
|
||||
$this->stripe->createOrReplaceSubscription($request, $user);
|
||||
|
||||
// Update user storage limit
|
||||
$user->settings()->update([
|
||||
'storage_capacity' => $plan['product']['metadata']['capacity'],
|
||||
]);
|
||||
|
||||
return response('Done!', 204);
|
||||
}
|
||||
|
||||
/**
|
||||
* Cancel Subscription
|
||||
*
|
||||
* @return ResponseFactory|Response
|
||||
*/
|
||||
public function cancel()
|
||||
{
|
||||
$user = User::find(Auth::id());
|
||||
|
||||
// Check if is demo
|
||||
if (is_demo($user->id)) {
|
||||
return $this->demo->response_204();
|
||||
}
|
||||
|
||||
// Cancel subscription
|
||||
$user->subscription('main')->cancel();
|
||||
|
||||
// Forget user subscription
|
||||
Cache::forget('subscription-user-' . $user->id);
|
||||
|
||||
return response('Done!', 204);
|
||||
}
|
||||
|
||||
/**
|
||||
* Resume Subscription
|
||||
*
|
||||
* @return ResponseFactory|Response
|
||||
*/
|
||||
public function resume()
|
||||
{
|
||||
$user = User::find(Auth::id());
|
||||
|
||||
// Check if is demo
|
||||
if (is_demo($user->id)) {
|
||||
return $this->demo->response_204();
|
||||
}
|
||||
|
||||
// Resume subscription
|
||||
$user->subscription('main')->resume();
|
||||
|
||||
// Forget user subscription
|
||||
Cache::forget('subscription-user-' . $user->id);
|
||||
|
||||
return response('Done!', 204);
|
||||
}
|
||||
}
|
||||
68
app/Http/Kernel.php
Normal file
68
app/Http/Kernel.php
Normal file
@@ -0,0 +1,68 @@
|
||||
<?php
|
||||
namespace App\Http;
|
||||
|
||||
use Illuminate\Foundation\Http\Kernel as HttpKernel;
|
||||
use Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful;
|
||||
|
||||
class Kernel extends HttpKernel
|
||||
{
|
||||
/**
|
||||
* The application's global HTTP middleware stack.
|
||||
*
|
||||
* These middleware are run during every request to your application.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $middleware = [
|
||||
// \App\Http\Middleware\TrustHosts::class,
|
||||
\App\Http\Middleware\TrustProxies::class,
|
||||
\Fruitcake\Cors\HandleCors::class,
|
||||
\App\Http\Middleware\PreventRequestsDuringMaintenance::class,
|
||||
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
|
||||
\App\Http\Middleware\TrimStrings::class,
|
||||
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
|
||||
];
|
||||
|
||||
/**
|
||||
* The application's route middleware groups.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $middlewareGroups = [
|
||||
'web' => [
|
||||
\App\Http\Middleware\EncryptCookies::class,
|
||||
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
|
||||
\Illuminate\Session\Middleware\StartSession::class,
|
||||
// \Illuminate\Session\Middleware\AuthenticateSession::class,
|
||||
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
|
||||
\App\Http\Middleware\VerifyCsrfToken::class,
|
||||
\Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||
],
|
||||
|
||||
'api' => [
|
||||
EnsureFrontendRequestsAreStateful::class,
|
||||
//'throttle:api',
|
||||
//\App\Http\Middleware\EncryptCookies::class,
|
||||
\Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||
],
|
||||
];
|
||||
|
||||
/**
|
||||
* The application's route middleware.
|
||||
*
|
||||
* These middleware may be assigned to groups or used individually.
|
||||
*
|
||||
* @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,
|
||||
'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,
|
||||
];
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace Domain\Homepage\Mail;
|
||||
namespace App\Http\Mail;
|
||||
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Mail\Mailable;
|
||||
@@ -8,16 +8,24 @@ use Illuminate\Queue\SerializesModels;
|
||||
class SendContactMessage extends Mailable
|
||||
{
|
||||
use Queueable, SerializesModels;
|
||||
private $request;
|
||||
|
||||
public function __construct(
|
||||
private array $request
|
||||
) {
|
||||
/**
|
||||
* Create a new message instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($request)
|
||||
{
|
||||
$this->request = $request;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the message.
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function build(): static
|
||||
public function build()
|
||||
{
|
||||
return $this->from(config('mail.from')['address'])
|
||||
->replyTo($this->request['email'])
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace Support\Middleware;
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Auth\Middleware\Authenticate as Middleware;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace Support\Middleware;
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode as Middleware;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace Support\Middleware;
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace Support\Middleware;
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance as Middleware;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace Support\Middleware;
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace Support\Middleware;
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Foundation\Http\Middleware\TrimStrings as Middleware;
|
||||
|
||||
22
app/Http/Middleware/TrustProxies.php
Normal file
22
app/Http/Middleware/TrustProxies.php
Normal file
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Fideloper\Proxy\TrustProxies as Middleware;
|
||||
|
||||
class TrustProxies extends Middleware
|
||||
{
|
||||
/**
|
||||
* The trusted proxies for this application.
|
||||
*
|
||||
* @var array|string
|
||||
*/
|
||||
protected $proxies;
|
||||
|
||||
/**
|
||||
* The headers that should be used to detect proxies.
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
protected $headers = Request::HEADER_X_FORWARDED_ALL;
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace Support\Middleware;
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
|
||||
|
||||
67
app/Http/Notifications/ConfirmPayment.php
Normal file
67
app/Http/Notifications/ConfirmPayment.php
Normal file
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
namespace App\Http\Notifications;
|
||||
|
||||
use Laravel\Cashier\Payment;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Notifications\Notification;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
|
||||
class ConfirmPayment extends Notification implements ShouldQueue
|
||||
{
|
||||
use Queueable;
|
||||
|
||||
/**
|
||||
* The PaymentIntent identifier.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $paymentId;
|
||||
|
||||
/**
|
||||
* The payment amount.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $amount;
|
||||
|
||||
/**
|
||||
* Create a new payment confirmation notification.
|
||||
*
|
||||
* @param \Laravel\Cashier\Payment $payment
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(Payment $payment)
|
||||
{
|
||||
$this->paymentId = $payment->id;
|
||||
$this->amount = $payment->amount();
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 = route('cashier.payment', ['id' => $this->paymentId]);
|
||||
|
||||
return (new MailMessage)
|
||||
->subject(__('cashier.confirm_payment'))
|
||||
->greeting(__('cashier.confirm_amount', ['amount' => $this->amount]))
|
||||
->line(__('cashier.confirm_description'))
|
||||
->action(__('cashier.confirm_button'), $url);
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace Domain\Admin\Requests;
|
||||
namespace App\Http\Requests\Admin;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace Domain\Admin\Requests;
|
||||
namespace App\Http\Requests\Admin;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
@@ -23,8 +23,8 @@ class ChangeStorageCapacityRequest extends FormRequest
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
'attributes' => 'required|array',
|
||||
'attributes.max_storage_amount' => 'required|digits_between:1,9',
|
||||
'attributes' => 'required|array',
|
||||
'attributes.storage_capacity' => 'required|digits_between:1,9',
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace Domain\Admin\Requests;
|
||||
namespace App\Http\Requests\Admin;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
@@ -23,11 +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',
|
||||
'role' => 'required|string',
|
||||
'avatar' => 'sometimes|file',
|
||||
'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',
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace Domain\Admin\Requests;
|
||||
namespace App\Http\Requests\Admin;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace App\Users\Requests;
|
||||
namespace App\Http\Requests\Auth;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace Domain\Items\Requests;
|
||||
namespace App\Http\Requests\FileBrowser;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace Domain\Folders\Requests;
|
||||
namespace App\Http\Requests\FileFunctions;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace Domain\Items\Requests;
|
||||
namespace App\Http\Requests\FileFunctions;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace Domain\Items\Requests;
|
||||
namespace App\Http\Requests\FileFunctions;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace Domain\Items\Requests;
|
||||
namespace App\Http\Requests\FileFunctions;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
namespace Domain\Files\Requests;
|
||||
namespace App\Http\Requests\FileFunctions;
|
||||
|
||||
use Domain\Admin\Rules\DisabledMimetypes;
|
||||
use App\Rules\DisabledMimetypes;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class UploadRequest extends FormRequest
|
||||
@@ -25,10 +25,7 @@ class UploadRequest extends FormRequest
|
||||
{
|
||||
return [
|
||||
'filename' => 'required|string',
|
||||
'parent_id' => 'nullable|uuid',
|
||||
'path' => 'required|string',
|
||||
'is_last' => 'sometimes|string',
|
||||
'extension' => 'sometimes|string|nullable',
|
||||
'folder_id' => 'nullable|uuid',
|
||||
'file' => ['required', 'file', new DisabledMimetypes],
|
||||
];
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace Domain\Localization\Requests;
|
||||
namespace App\Http\Requests\Languages;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace Domain\Localization\Requests;
|
||||
namespace App\Http\Requests\Languages;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace Domain\Localization\Requests;
|
||||
namespace App\Http\Requests\Languages;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
38
app/Http/Requests/Oasis/CreateOrderRequest.php
Normal file
38
app/Http/Requests/Oasis/CreateOrderRequest.php
Normal 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',
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,9 @@
|
||||
<?php
|
||||
namespace Domain\Settings\Requests;
|
||||
namespace App\Http\Requests\Payments;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class StoreStorageCredentialsRequest extends FormRequest
|
||||
class RegisterNewPaymentMethodRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
@@ -23,7 +23,8 @@ class StoreStorageCredentialsRequest extends FormRequest
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
'storage' => 'required|array',
|
||||
'token' => 'required|string',
|
||||
'default' => 'required|boolean',
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,9 @@
|
||||
<?php
|
||||
namespace App\Users\Requests;
|
||||
namespace App\Http\Requests\PublicPages;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class UserCreateAccessTokenRequest extends FormRequest
|
||||
class SendContactMessageRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
@@ -23,7 +23,8 @@ class UserCreateAccessTokenRequest extends FormRequest
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
'name' => 'required|string|min:3',
|
||||
'email' => 'required|email',
|
||||
'message' => 'required|string',
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace Domain\SetupWizard\Requests;
|
||||
namespace App\Http\Requests\SetupWizard;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace Domain\SetupWizard\Requests;
|
||||
namespace App\Http\Requests\SetupWizard;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace Domain\SetupWizard\Requests;
|
||||
namespace App\Http\Requests\SetupWizard;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
@@ -23,20 +23,20 @@ class StoreEnvironmentSetupRequest extends FormRequest
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
'broadcast' => 'required|array',
|
||||
'storage' => 'required|array',
|
||||
'environment' => 'required|string',
|
||||
'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',
|
||||
'mailDriver' => 'required|string',
|
||||
'smtp' => 'sometimes|array',
|
||||
'ses' => 'sometimes|array',
|
||||
'mailgun' => 'sometimes|array',
|
||||
'postmark' => 'sometimes|array',
|
||||
'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',
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace Domain\SetupWizard\Requests;
|
||||
namespace App\Http\Requests\SetupWizard;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace Domain\SetupWizard\Requests;
|
||||
namespace App\Http\Requests\SetupWizard;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace Domain\SetupWizard\Requests;
|
||||
namespace App\Http\Requests\SetupWizard;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace Domain\Sharing\Requests;
|
||||
namespace App\Http\Requests\Share;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace Domain\Sharing\Requests;
|
||||
namespace App\Http\Requests\Share;
|
||||
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace Domain\Sharing\Requests;
|
||||
namespace App\Http\Requests\Share;
|
||||
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
namespace App\Http\Requests\Subscription;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class StoreUpgradeAccountRequest 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 [
|
||||
// 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.billing_phone_number' => '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.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.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',
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,7 @@
|
||||
<?php
|
||||
namespace App\Users\Requests;
|
||||
namespace App\Http\Requests\User;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
use App\Users\Rules\PasswordMatchWithCurrent;
|
||||
|
||||
class UpdateUserPasswordRequest extends FormRequest
|
||||
{
|
||||
@@ -24,7 +23,6 @@ class UpdateUserPasswordRequest extends FormRequest
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
'current' => ['required', 'string', new PasswordMatchWithCurrent()],
|
||||
'password' => 'required|string|min:6|confirmed',
|
||||
];
|
||||
}
|
||||
34
app/Http/Resources/FileResource.php
Normal file
34
app/Http/Resources/FileResource.php
Normal file
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
namespace App\Http\Resources;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class FileResource 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' => '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,
|
||||
'created_at' => $this->created_at,
|
||||
'updated_at' => $this->created_at,
|
||||
],
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,11 @@
|
||||
<?php
|
||||
namespace App\Users\Resources;
|
||||
namespace App\Http\Resources;
|
||||
|
||||
use Illuminate\Http\Resources\Json\ResourceCollection;
|
||||
|
||||
class UsersMinimalCollection extends ResourceCollection
|
||||
class InvoiceAdminCollection extends ResourceCollection
|
||||
{
|
||||
public $collects = UserMinimalResource::class;
|
||||
public $collects = InvoiceAdminResource::class;
|
||||
|
||||
/**
|
||||
* Transform the resource collection into an array.
|
||||
65
app/Http/Resources/InvoiceAdminResource.php
Normal file
65
app/Http/Resources/InvoiceAdminResource.php
Normal file
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
namespace App\Http\Resources;
|
||||
|
||||
use App\Models\User;
|
||||
use Laravel\Cashier\Cashier;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class InvoiceAdminResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
$user = User::where('stripe_id', $this['customer'])
|
||||
->first();
|
||||
|
||||
return [
|
||||
'data' => [
|
||||
'id' => $this['id'],
|
||||
'type' => 'invoices',
|
||||
'attributes' => [
|
||||
'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'],
|
||||
'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'],
|
||||
'description' => $this['lines']['data'][0]['description'],
|
||||
],
|
||||
'seller' => null,
|
||||
],
|
||||
$this->mergeWhen($user, function () use ($user) {
|
||||
return [
|
||||
'relationships' => [
|
||||
'user' => [
|
||||
'data' => [
|
||||
'id' => $user->id,
|
||||
'type' => 'user',
|
||||
'attributes' => [
|
||||
'name' => $user->settings->name,
|
||||
'avatar' => $user->settings->avatar,
|
||||
],
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
}),
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
22
app/Http/Resources/InvoiceCollection.php
Normal file
22
app/Http/Resources/InvoiceCollection.php
Normal file
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
namespace App\Http\Resources;
|
||||
|
||||
use Illuminate\Http\Resources\Json\ResourceCollection;
|
||||
|
||||
class InvoiceCollection extends ResourceCollection
|
||||
{
|
||||
public $collects = InvoiceResource::class;
|
||||
|
||||
/**
|
||||
* Transform the resource collection into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'data' => $this->collection,
|
||||
];
|
||||
}
|
||||
}
|
||||
96
app/Http/Resources/InvoiceResource.php
Normal file
96
app/Http/Resources/InvoiceResource.php
Normal file
@@ -0,0 +1,96 @@
|
||||
<?php
|
||||
namespace App\Http\Resources;
|
||||
|
||||
use App\Models\User;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class InvoiceResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
$user = User::whereStripeId($this->customer)
|
||||
->first();
|
||||
|
||||
return [
|
||||
'data' => [
|
||||
'id' => $this->id,
|
||||
'type' => 'invoices',
|
||||
'attributes' => [
|
||||
'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,
|
||||
'billing_phone_number' => $this->customer_phone,
|
||||
],
|
||||
'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',
|
||||
'attributes' => [
|
||||
'name' => $user->settings->name,
|
||||
'avatar' => $user->settings->avatar,
|
||||
],
|
||||
],
|
||||
],
|
||||
],
|
||||
]),
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
private function get_invoice_subscriptions(): array
|
||||
{
|
||||
$array = [];
|
||||
|
||||
foreach ($this->subscriptions() as $item) {
|
||||
array_push($array, [
|
||||
'amount' => $item->total(),
|
||||
'description' => $item->description,
|
||||
'currency' => $item->currency,
|
||||
'type' => $item->type,
|
||||
]);
|
||||
}
|
||||
|
||||
return $array;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
private function get_invoice_items(): array
|
||||
{
|
||||
$array = [];
|
||||
|
||||
foreach ($this->invoiceItems() as $item) {
|
||||
array_push($array, [
|
||||
'amount' => $item->total(),
|
||||
'description' => $item->description,
|
||||
'currency' => $item->currency,
|
||||
'type' => $item->type,
|
||||
]);
|
||||
}
|
||||
|
||||
return $array;
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
namespace Domain\Localization\Resources;
|
||||
namespace App\Http\Resources;
|
||||
|
||||
use Domain\Localization\Models\Language;
|
||||
use App\Models\Language;
|
||||
use Illuminate\Http\Resources\Json\ResourceCollection;
|
||||
|
||||
class LanguageCollection extends ResourceCollection
|
||||
@@ -17,7 +17,7 @@ class LanguageCollection extends ResourceCollection
|
||||
public function toArray($request)
|
||||
{
|
||||
$current_language = Language::with('languageTranslations')
|
||||
->whereLocale(get_settings('language') ?? 'en')
|
||||
->whereLocale(get_setting('language') ?? 'en')
|
||||
->first();
|
||||
|
||||
return [
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user