commit 91ed2696836c09b28dda89a194280ae93ea16fb8 Author: Christian Date: Thu Mar 23 18:50:47 2023 +0100 Initial commit diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..1671c9b --- /dev/null +++ b/.editorconfig @@ -0,0 +1,18 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +indent_style = space +indent_size = 4 +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false + +[*.{yml,yaml}] +indent_size = 2 + +[docker-compose.yml] +indent_size = 4 diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..9bb1bd7 --- /dev/null +++ b/.env.example @@ -0,0 +1,52 @@ +APP_NAME=Laravel +APP_ENV=local +APP_KEY= +APP_DEBUG=true +APP_URL=http://localhost + +LOG_CHANNEL=stack +LOG_DEPRECATIONS_CHANNEL=null +LOG_LEVEL=debug + +DB_CONNECTION=mysql +DB_HOST=127.0.0.1 +DB_PORT=3306 +DB_DATABASE=laravel +DB_USERNAME=root +DB_PASSWORD= + +BROADCAST_DRIVER=log +CACHE_DRIVER=file +FILESYSTEM_DISK=local +QUEUE_CONNECTION=sync +SESSION_DRIVER=file +SESSION_LIFETIME=120 + +MEMCACHED_HOST=127.0.0.1 + +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD=null +REDIS_PORT=6379 + +MAIL_MAILER=smtp +MAIL_HOST=mailhog +MAIL_PORT=1025 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_ENCRYPTION=null +MAIL_FROM_ADDRESS="hello@example.com" +MAIL_FROM_NAME="${APP_NAME}" + +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +AWS_DEFAULT_REGION=us-east-1 +AWS_BUCKET= +AWS_USE_PATH_STYLE_ENDPOINT=false + +PUSHER_APP_ID= +PUSHER_APP_KEY= +PUSHER_APP_SECRET= +PUSHER_APP_CLUSTER=mt1 + +MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" +MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..510d996 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,10 @@ +* text=auto + +*.blade.php diff=html +*.css diff=css +*.html diff=html +*.md diff=markdown +*.php diff=php + +/.github export-ignore +CHANGELOG.md export-ignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bc67a66 --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +/node_modules +/public/hot +/public/storage +/storage/*.key +/vendor +.env +.env.backup +.phpunit.result.cache +Homestead.json +Homestead.yaml +npm-debug.log +yarn-error.log +/.idea +/.vscode diff --git a/.lando.yml b/.lando.yml new file mode 100644 index 0000000..e5d7659 --- /dev/null +++ b/.lando.yml @@ -0,0 +1,32 @@ +name: larabb +services: + appserver: + type: php:8.1 + via: apache:2.4 + ssl: true + webroot: ./public + xdebug: true + composer_version: 2-latest + config: + php: .lando/php.ini + build_as_root: + # Note that you will want to use the script for the major version of node you want to install + # See: https://github.com/nodesource/distributions/blob/master/README.md#installation-instructions + - curl -sL https://deb.nodesource.com/setup_18.x | bash - + - apt-get install -y nodejs + database: + portforward: 33061 + type: mariadb:10.5.15 +proxy: + appserver: + - larabb.lando +tooling: + setup: + description: Sets up the Contao instance + cmd: + - database: zcat .lando/database.sql.gz | mysql -u mariadb -pmariadb database + - appserver: composer install + node: + service: appserver + npm: + service: appserver diff --git a/.lando/database.sql.gz b/.lando/database.sql.gz new file mode 100644 index 0000000..846293e Binary files /dev/null and b/.lando/database.sql.gz differ diff --git a/.lando/php.ini b/.lando/php.ini new file mode 100644 index 0000000..422378d --- /dev/null +++ b/.lando/php.ini @@ -0,0 +1,18 @@ +memory_limit = -1 + +xdebug.max_nesting_level = 256 +xdebug.show_exception_trace = 0 +xdebug.collect_params = 0 +xdebug.mode = debug +xdebug.client_host = ${LANDO_HOST_IP} +xdebug.client_port = 9003 +xdebug.start_with_request = yes +xdebug.log = /tmp/xdebug.log + +; brauche ich (rolf), damit debugging funktioniert +; Remote settings +xdebug.remote_enable = 1 +xdebug.remote_autostart = 1 +xdebug.remote_host = ${LANDO_HOST_IP} +; xdebug.remote_connect_back = 1 +xdebug.remote_log = /tmp/xdebug_remote.log diff --git a/.styleci.yml b/.styleci.yml new file mode 100644 index 0000000..79f63b4 --- /dev/null +++ b/.styleci.yml @@ -0,0 +1,12 @@ +php: + preset: laravel + disabled: + - no_unused_imports + finder: + not-name: + - index.php +js: + finder: + not-name: + - webpack.mix.js +css: true diff --git a/README.md b/README.md new file mode 100644 index 0000000..f171eca --- /dev/null +++ b/README.md @@ -0,0 +1,64 @@ +

+ +

+Build Status +Total Downloads +Latest Stable Version +License +

+ +## About Laravel + +Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as: + +- [Simple, fast routing engine](https://laravel.com/docs/routing). +- [Powerful dependency injection container](https://laravel.com/docs/container). +- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage. +- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent). +- Database agnostic [schema migrations](https://laravel.com/docs/migrations). +- [Robust background job processing](https://laravel.com/docs/queues). +- [Real-time event broadcasting](https://laravel.com/docs/broadcasting). + +Laravel is accessible, powerful, and provides tools required for large, robust applications. + +## Learning Laravel + +Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework. + +If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains over 2000 video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library. + +## Laravel Sponsors + +We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the Laravel [Patreon page](https://patreon.com/taylorotwell). + +### Premium Partners + +- **[Vehikl](https://vehikl.com/)** +- **[Tighten Co.](https://tighten.co)** +- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)** +- **[64 Robots](https://64robots.com)** +- **[Cubet Techno Labs](https://cubettech.com)** +- **[Cyber-Duck](https://cyber-duck.co.uk)** +- **[Many](https://www.many.co.uk)** +- **[Webdock, Fast VPS Hosting](https://www.webdock.io/en)** +- **[DevSquad](https://devsquad.com)** +- **[Curotec](https://www.curotec.com/services/technologies/laravel/)** +- **[OP.GG](https://op.gg)** +- **[WebReinvent](https://webreinvent.com/?utm_source=laravel&utm_medium=github&utm_campaign=patreon-sponsors)** +- **[Lendio](https://lendio.com)** + +## Contributing + +Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions). + +## Code of Conduct + +In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct). + +## Security Vulnerabilities + +If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed. + +## License + +The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT). diff --git a/_ide_helper.php b/_ide_helper.php new file mode 100644 index 0000000..0bb7dcf --- /dev/null +++ b/_ide_helper.php @@ -0,0 +1,17897 @@ + + * @see https://github.com/barryvdh/laravel-ide-helper + */ + + namespace Illuminate\Support\Facades { + /** + * + * + * @see \Illuminate\Contracts\Foundation\Application + */ + class App { + /** + * Get the version number of the application. + * + * @return string + * @static + */ + public static function version() + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->version(); + } + /** + * Run the given array of bootstrap classes. + * + * @param string[] $bootstrappers + * @return void + * @static + */ + public static function bootstrapWith($bootstrappers) + { + /** @var \Illuminate\Foundation\Application $instance */ + $instance->bootstrapWith($bootstrappers); + } + /** + * Register a callback to run after loading the environment. + * + * @param \Closure $callback + * @return void + * @static + */ + public static function afterLoadingEnvironment($callback) + { + /** @var \Illuminate\Foundation\Application $instance */ + $instance->afterLoadingEnvironment($callback); + } + /** + * Register a callback to run before a bootstrapper. + * + * @param string $bootstrapper + * @param \Closure $callback + * @return void + * @static + */ + public static function beforeBootstrapping($bootstrapper, $callback) + { + /** @var \Illuminate\Foundation\Application $instance */ + $instance->beforeBootstrapping($bootstrapper, $callback); + } + /** + * Register a callback to run after a bootstrapper. + * + * @param string $bootstrapper + * @param \Closure $callback + * @return void + * @static + */ + public static function afterBootstrapping($bootstrapper, $callback) + { + /** @var \Illuminate\Foundation\Application $instance */ + $instance->afterBootstrapping($bootstrapper, $callback); + } + /** + * Determine if the application has been bootstrapped before. + * + * @return bool + * @static + */ + public static function hasBeenBootstrapped() + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->hasBeenBootstrapped(); + } + /** + * Set the base path for the application. + * + * @param string $basePath + * @return \Illuminate\Foundation\Application + * @static + */ + public static function setBasePath($basePath) + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->setBasePath($basePath); + } + /** + * Get the path to the application "app" directory. + * + * @param string $path + * @return string + * @static + */ + public static function path($path = '') + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->path($path); + } + /** + * Set the application directory. + * + * @param string $path + * @return \Illuminate\Foundation\Application + * @static + */ + public static function useAppPath($path) + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->useAppPath($path); + } + /** + * Get the base path of the Laravel installation. + * + * @param string $path Optionally, a path to append to the base path + * @return string + * @static + */ + public static function basePath($path = '') + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->basePath($path); + } + /** + * Get the path to the bootstrap directory. + * + * @param string $path Optionally, a path to append to the bootstrap path + * @return string + * @static + */ + public static function bootstrapPath($path = '') + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->bootstrapPath($path); + } + /** + * Get the path to the application configuration files. + * + * @param string $path Optionally, a path to append to the config path + * @return string + * @static + */ + public static function configPath($path = '') + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->configPath($path); + } + /** + * Get the path to the database directory. + * + * @param string $path Optionally, a path to append to the database path + * @return string + * @static + */ + public static function databasePath($path = '') + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->databasePath($path); + } + /** + * Set the database directory. + * + * @param string $path + * @return \Illuminate\Foundation\Application + * @static + */ + public static function useDatabasePath($path) + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->useDatabasePath($path); + } + /** + * Get the path to the language files. + * + * @return string + * @static + */ + public static function langPath() + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->langPath(); + } + /** + * Get the path to the public / web directory. + * + * @return string + * @static + */ + public static function publicPath() + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->publicPath(); + } + /** + * Get the path to the storage directory. + * + * @return string + * @static + */ + public static function storagePath() + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->storagePath(); + } + /** + * Set the storage directory. + * + * @param string $path + * @return \Illuminate\Foundation\Application + * @static + */ + public static function useStoragePath($path) + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->useStoragePath($path); + } + /** + * Get the path to the resources directory. + * + * @param string $path + * @return string + * @static + */ + public static function resourcePath($path = '') + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->resourcePath($path); + } + /** + * Get the path to the environment file directory. + * + * @return string + * @static + */ + public static function environmentPath() + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->environmentPath(); + } + /** + * Set the directory for the environment file. + * + * @param string $path + * @return \Illuminate\Foundation\Application + * @static + */ + public static function useEnvironmentPath($path) + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->useEnvironmentPath($path); + } + /** + * Set the environment file to be loaded during bootstrapping. + * + * @param string $file + * @return \Illuminate\Foundation\Application + * @static + */ + public static function loadEnvironmentFrom($file) + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->loadEnvironmentFrom($file); + } + /** + * Get the environment file the application is using. + * + * @return string + * @static + */ + public static function environmentFile() + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->environmentFile(); + } + /** + * Get the fully qualified path to the environment file. + * + * @return string + * @static + */ + public static function environmentFilePath() + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->environmentFilePath(); + } + /** + * Get or check the current application environment. + * + * @param string|array $environments + * @return string|bool + * @static + */ + public static function environment(...$environments) + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->environment(...$environments); + } + /** + * Determine if application is in local environment. + * + * @return bool + * @static + */ + public static function isLocal() + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->isLocal(); + } + /** + * Determine if application is in production environment. + * + * @return bool + * @static + */ + public static function isProduction() + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->isProduction(); + } + /** + * Detect the application's current environment. + * + * @param \Closure $callback + * @return string + * @static + */ + public static function detectEnvironment($callback) + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->detectEnvironment($callback); + } + /** + * Determine if the application is running in the console. + * + * @return bool + * @static + */ + public static function runningInConsole() + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->runningInConsole(); + } + /** + * Determine if the application is running unit tests. + * + * @return bool + * @static + */ + public static function runningUnitTests() + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->runningUnitTests(); + } + /** + * Register all of the configured providers. + * + * @return void + * @static + */ + public static function registerConfiguredProviders() + { + /** @var \Illuminate\Foundation\Application $instance */ + $instance->registerConfiguredProviders(); + } + /** + * Register a service provider with the application. + * + * @param \Illuminate\Support\ServiceProvider|string $provider + * @param bool $force + * @return \Illuminate\Support\ServiceProvider + * @static + */ + public static function register($provider, $force = false) + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->register($provider, $force); + } + /** + * Get the registered service provider instance if it exists. + * + * @param \Illuminate\Support\ServiceProvider|string $provider + * @return \Illuminate\Support\ServiceProvider|null + * @static + */ + public static function getProvider($provider) + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->getProvider($provider); + } + /** + * Get the registered service provider instances if any exist. + * + * @param \Illuminate\Support\ServiceProvider|string $provider + * @return array + * @static + */ + public static function getProviders($provider) + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->getProviders($provider); + } + /** + * Resolve a service provider instance from the class name. + * + * @param string $provider + * @return \Illuminate\Support\ServiceProvider + * @static + */ + public static function resolveProvider($provider) + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->resolveProvider($provider); + } + /** + * Load and boot all of the remaining deferred providers. + * + * @return void + * @static + */ + public static function loadDeferredProviders() + { + /** @var \Illuminate\Foundation\Application $instance */ + $instance->loadDeferredProviders(); + } + /** + * Load the provider for a deferred service. + * + * @param string $service + * @return void + * @static + */ + public static function loadDeferredProvider($service) + { + /** @var \Illuminate\Foundation\Application $instance */ + $instance->loadDeferredProvider($service); + } + /** + * Register a deferred provider and service. + * + * @param string $provider + * @param string|null $service + * @return void + * @static + */ + public static function registerDeferredProvider($provider, $service = null) + { + /** @var \Illuminate\Foundation\Application $instance */ + $instance->registerDeferredProvider($provider, $service); + } + /** + * Resolve the given type from the container. + * + * @param string $abstract + * @param array $parameters + * @return mixed + * @static + */ + public static function make($abstract, $parameters = []) + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->make($abstract, $parameters); + } + /** + * Determine if the given abstract type has been bound. + * + * @param string $abstract + * @return bool + * @static + */ + public static function bound($abstract) + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->bound($abstract); + } + /** + * Determine if the application has booted. + * + * @return bool + * @static + */ + public static function isBooted() + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->isBooted(); + } + /** + * Boot the application's service providers. + * + * @return void + * @static + */ + public static function boot() + { + /** @var \Illuminate\Foundation\Application $instance */ + $instance->boot(); + } + /** + * Register a new boot listener. + * + * @param callable $callback + * @return void + * @static + */ + public static function booting($callback) + { + /** @var \Illuminate\Foundation\Application $instance */ + $instance->booting($callback); + } + /** + * Register a new "booted" listener. + * + * @param callable $callback + * @return void + * @static + */ + public static function booted($callback) + { + /** @var \Illuminate\Foundation\Application $instance */ + $instance->booted($callback); + } + /** + * {@inheritdoc} + * + * @static + */ + public static function handle($request, $type = 1, $catch = true) + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->handle($request, $type, $catch); + } + /** + * Determine if middleware has been disabled for the application. + * + * @return bool + * @static + */ + public static function shouldSkipMiddleware() + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->shouldSkipMiddleware(); + } + /** + * Get the path to the cached services.php file. + * + * @return string + * @static + */ + public static function getCachedServicesPath() + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->getCachedServicesPath(); + } + /** + * Get the path to the cached packages.php file. + * + * @return string + * @static + */ + public static function getCachedPackagesPath() + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->getCachedPackagesPath(); + } + /** + * Determine if the application configuration is cached. + * + * @return bool + * @static + */ + public static function configurationIsCached() + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->configurationIsCached(); + } + /** + * Get the path to the configuration cache file. + * + * @return string + * @static + */ + public static function getCachedConfigPath() + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->getCachedConfigPath(); + } + /** + * Determine if the application routes are cached. + * + * @return bool + * @static + */ + public static function routesAreCached() + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->routesAreCached(); + } + /** + * Get the path to the routes cache file. + * + * @return string + * @static + */ + public static function getCachedRoutesPath() + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->getCachedRoutesPath(); + } + /** + * Determine if the application events are cached. + * + * @return bool + * @static + */ + public static function eventsAreCached() + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->eventsAreCached(); + } + /** + * Get the path to the events cache file. + * + * @return string + * @static + */ + public static function getCachedEventsPath() + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->getCachedEventsPath(); + } + /** + * Add new prefix to list of absolute path prefixes. + * + * @param string $prefix + * @return \Illuminate\Foundation\Application + * @static + */ + public static function addAbsoluteCachePathPrefix($prefix) + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->addAbsoluteCachePathPrefix($prefix); + } + /** + * Determine if the application is currently down for maintenance. + * + * @return bool + * @static + */ + public static function isDownForMaintenance() + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->isDownForMaintenance(); + } + /** + * Throw an HttpException with the given data. + * + * @param int $code + * @param string $message + * @param array $headers + * @return void + * @throws \Symfony\Component\HttpKernel\Exception\HttpException + * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException + * @static + */ + public static function abort($code, $message = '', $headers = []) + { + /** @var \Illuminate\Foundation\Application $instance */ + $instance->abort($code, $message, $headers); + } + /** + * Register a terminating callback with the application. + * + * @param callable|string $callback + * @return \Illuminate\Foundation\Application + * @static + */ + public static function terminating($callback) + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->terminating($callback); + } + /** + * Terminate the application. + * + * @return void + * @static + */ + public static function terminate() + { + /** @var \Illuminate\Foundation\Application $instance */ + $instance->terminate(); + } + /** + * Get the service providers that have been loaded. + * + * @return array + * @static + */ + public static function getLoadedProviders() + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->getLoadedProviders(); + } + /** + * Determine if the given service provider is loaded. + * + * @param string $provider + * @return bool + * @static + */ + public static function providerIsLoaded($provider) + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->providerIsLoaded($provider); + } + /** + * Get the application's deferred services. + * + * @return array + * @static + */ + public static function getDeferredServices() + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->getDeferredServices(); + } + /** + * Set the application's deferred services. + * + * @param array $services + * @return void + * @static + */ + public static function setDeferredServices($services) + { + /** @var \Illuminate\Foundation\Application $instance */ + $instance->setDeferredServices($services); + } + /** + * Add an array of services to the application's deferred services. + * + * @param array $services + * @return void + * @static + */ + public static function addDeferredServices($services) + { + /** @var \Illuminate\Foundation\Application $instance */ + $instance->addDeferredServices($services); + } + /** + * Determine if the given service is a deferred service. + * + * @param string $service + * @return bool + * @static + */ + public static function isDeferredService($service) + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->isDeferredService($service); + } + /** + * Configure the real-time facade namespace. + * + * @param string $namespace + * @return void + * @static + */ + public static function provideFacades($namespace) + { + /** @var \Illuminate\Foundation\Application $instance */ + $instance->provideFacades($namespace); + } + /** + * Get the current application locale. + * + * @return string + * @static + */ + public static function getLocale() + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->getLocale(); + } + /** + * Get the current application fallback locale. + * + * @return string + * @static + */ + public static function getFallbackLocale() + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->getFallbackLocale(); + } + /** + * Set the current application locale. + * + * @param string $locale + * @return void + * @static + */ + public static function setLocale($locale) + { + /** @var \Illuminate\Foundation\Application $instance */ + $instance->setLocale($locale); + } + /** + * Set the current application fallback locale. + * + * @param string $fallbackLocale + * @return void + * @static + */ + public static function setFallbackLocale($fallbackLocale) + { + /** @var \Illuminate\Foundation\Application $instance */ + $instance->setFallbackLocale($fallbackLocale); + } + /** + * Determine if application locale is the given locale. + * + * @param string $locale + * @return bool + * @static + */ + public static function isLocale($locale) + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->isLocale($locale); + } + /** + * Register the core class aliases in the container. + * + * @return void + * @static + */ + public static function registerCoreContainerAliases() + { + /** @var \Illuminate\Foundation\Application $instance */ + $instance->registerCoreContainerAliases(); + } + /** + * Flush the container of all bindings and resolved instances. + * + * @return void + * @static + */ + public static function flush() + { + /** @var \Illuminate\Foundation\Application $instance */ + $instance->flush(); + } + /** + * Get the application namespace. + * + * @return string + * @throws \RuntimeException + * @static + */ + public static function getNamespace() + { + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->getNamespace(); + } + /** + * Define a contextual binding. + * + * @param array|string $concrete + * @return \Illuminate\Contracts\Container\ContextualBindingBuilder + * @static + */ + public static function when($concrete) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->when($concrete); + } + /** + * Returns true if the container can return an entry for the given identifier. + * + * Returns false otherwise. + * + * `has($id)` returning true does not mean that `get($id)` will not throw an exception. + * It does however mean that `get($id)` will not throw a `NotFoundExceptionInterface`. + * + * @param string $id Identifier of the entry to look for. + * @return bool + * @static + */ + public static function has($id) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->has($id); + } + /** + * Determine if the given abstract type has been resolved. + * + * @param string $abstract + * @return bool + * @static + */ + public static function resolved($abstract) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->resolved($abstract); + } + /** + * Determine if a given type is shared. + * + * @param string $abstract + * @return bool + * @static + */ + public static function isShared($abstract) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->isShared($abstract); + } + /** + * Determine if a given string is an alias. + * + * @param string $name + * @return bool + * @static + */ + public static function isAlias($name) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->isAlias($name); + } + /** + * Register a binding with the container. + * + * @param string $abstract + * @param \Closure|string|null $concrete + * @param bool $shared + * @return void + * @static + */ + public static function bind($abstract, $concrete = null, $shared = false) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + $instance->bind($abstract, $concrete, $shared); + } + /** + * Determine if the container has a method binding. + * + * @param string $method + * @return bool + * @static + */ + public static function hasMethodBinding($method) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->hasMethodBinding($method); + } + /** + * Bind a callback to resolve with Container::call. + * + * @param array|string $method + * @param \Closure $callback + * @return void + * @static + */ + public static function bindMethod($method, $callback) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + $instance->bindMethod($method, $callback); + } + /** + * Get the method binding for the given method. + * + * @param string $method + * @param mixed $instance + * @return mixed + * @static + */ + public static function callMethodBinding($method, $instance) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->callMethodBinding($method, $instance); + } + /** + * Add a contextual binding to the container. + * + * @param string $concrete + * @param string $abstract + * @param \Closure|string $implementation + * @return void + * @static + */ + public static function addContextualBinding($concrete, $abstract, $implementation) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + $instance->addContextualBinding($concrete, $abstract, $implementation); + } + /** + * Register a binding if it hasn't already been registered. + * + * @param string $abstract + * @param \Closure|string|null $concrete + * @param bool $shared + * @return void + * @static + */ + public static function bindIf($abstract, $concrete = null, $shared = false) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + $instance->bindIf($abstract, $concrete, $shared); + } + /** + * Register a shared binding in the container. + * + * @param string $abstract + * @param \Closure|string|null $concrete + * @return void + * @static + */ + public static function singleton($abstract, $concrete = null) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + $instance->singleton($abstract, $concrete); + } + /** + * Register a shared binding if it hasn't already been registered. + * + * @param string $abstract + * @param \Closure|string|null $concrete + * @return void + * @static + */ + public static function singletonIf($abstract, $concrete = null) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + $instance->singletonIf($abstract, $concrete); + } + /** + * "Extend" an abstract type in the container. + * + * @param string $abstract + * @param \Closure $closure + * @return void + * @throws \InvalidArgumentException + * @static + */ + public static function extend($abstract, $closure) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + $instance->extend($abstract, $closure); + } + /** + * Register an existing instance as shared in the container. + * + * @param string $abstract + * @param mixed $instance + * @return mixed + * @static + */ + public static function instance($abstract, $instance) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->instance($abstract, $instance); + } + /** + * Assign a set of tags to a given binding. + * + * @param array|string $abstracts + * @param array|mixed $tags + * @return void + * @static + */ + public static function tag($abstracts, $tags) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + $instance->tag($abstracts, $tags); + } + /** + * Resolve all of the bindings for a given tag. + * + * @param string $tag + * @return \Illuminate\Container\iterable + * @static + */ + public static function tagged($tag) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->tagged($tag); + } + /** + * Alias a type to a different name. + * + * @param string $abstract + * @param string $alias + * @return void + * @throws \LogicException + * @static + */ + public static function alias($abstract, $alias) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + $instance->alias($abstract, $alias); + } + /** + * Bind a new callback to an abstract's rebind event. + * + * @param string $abstract + * @param \Closure $callback + * @return mixed + * @static + */ + public static function rebinding($abstract, $callback) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->rebinding($abstract, $callback); + } + /** + * Refresh an instance on the given target and method. + * + * @param string $abstract + * @param mixed $target + * @param string $method + * @return mixed + * @static + */ + public static function refresh($abstract, $target, $method) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->refresh($abstract, $target, $method); + } + /** + * Wrap the given closure such that its dependencies will be injected when executed. + * + * @param \Closure $callback + * @param array $parameters + * @return \Closure + * @static + */ + public static function wrap($callback, $parameters = []) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->wrap($callback, $parameters); + } + /** + * Call the given Closure / class@method and inject its dependencies. + * + * @param callable|string $callback + * @param \Illuminate\Container\array $parameters + * @param string|null $defaultMethod + * @return mixed + * @throws \InvalidArgumentException + * @static + */ + public static function call($callback, $parameters = [], $defaultMethod = null) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->call($callback, $parameters, $defaultMethod); + } + /** + * Get a closure to resolve the given type from the container. + * + * @param string $abstract + * @return \Closure + * @static + */ + public static function factory($abstract) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->factory($abstract); + } + /** + * An alias function name for make(). + * + * @param string $abstract + * @param array $parameters + * @return mixed + * @throws \Illuminate\Contracts\Container\BindingResolutionException + * @static + */ + public static function makeWith($abstract, $parameters = []) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->makeWith($abstract, $parameters); + } + /** + * Finds an entry of the container by its identifier and returns it. + * + * @param string $id Identifier of the entry to look for. + * @throws NotFoundExceptionInterface No entry was found for **this** identifier. + * @throws ContainerExceptionInterface Error while retrieving the entry. + * @return mixed Entry. + * @static + */ + public static function get($id) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->get($id); + } + /** + * Instantiate a concrete instance of the given type. + * + * @param \Closure|string $concrete + * @return mixed + * @throws \Illuminate\Contracts\Container\BindingResolutionException + * @static + */ + public static function build($concrete) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->build($concrete); + } + /** + * Register a new resolving callback. + * + * @param \Closure|string $abstract + * @param \Closure|null $callback + * @return void + * @static + */ + public static function resolving($abstract, $callback = null) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + $instance->resolving($abstract, $callback); + } + /** + * Register a new after resolving callback for all types. + * + * @param \Closure|string $abstract + * @param \Closure|null $callback + * @return void + * @static + */ + public static function afterResolving($abstract, $callback = null) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + $instance->afterResolving($abstract, $callback); + } + /** + * Get the container's bindings. + * + * @return array + * @static + */ + public static function getBindings() + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->getBindings(); + } + /** + * Get the alias for an abstract if available. + * + * @param string $abstract + * @return string + * @static + */ + public static function getAlias($abstract) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->getAlias($abstract); + } + /** + * Remove all of the extender callbacks for a given type. + * + * @param string $abstract + * @return void + * @static + */ + public static function forgetExtenders($abstract) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + $instance->forgetExtenders($abstract); + } + /** + * Remove a resolved instance from the instance cache. + * + * @param string $abstract + * @return void + * @static + */ + public static function forgetInstance($abstract) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + $instance->forgetInstance($abstract); + } + /** + * Clear all of the instances from the container. + * + * @return void + * @static + */ + public static function forgetInstances() + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + $instance->forgetInstances(); + } + /** + * Get the globally available instance of the container. + * + * @return static + * @static + */ + public static function getInstance() + { //Method inherited from \Illuminate\Container\Container + return \Illuminate\Foundation\Application::getInstance(); + } + /** + * Set the shared instance of the container. + * + * @param \Illuminate\Contracts\Container\Container|null $container + * @return \Illuminate\Contracts\Container\Container|static + * @static + */ + public static function setInstance($container = null) + { //Method inherited from \Illuminate\Container\Container + return \Illuminate\Foundation\Application::setInstance($container); + } + /** + * Determine if a given offset exists. + * + * @param string $key + * @return bool + * @static + */ + public static function offsetExists($key) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->offsetExists($key); + } + /** + * Get the value at a given offset. + * + * @param string $key + * @return mixed + * @static + */ + public static function offsetGet($key) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + return $instance->offsetGet($key); + } + /** + * Set the value at a given offset. + * + * @param string $key + * @param mixed $value + * @return void + * @static + */ + public static function offsetSet($key, $value) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + $instance->offsetSet($key, $value); + } + /** + * Unset the value at a given offset. + * + * @param string $key + * @return void + * @static + */ + public static function offsetUnset($key) + { //Method inherited from \Illuminate\Container\Container + /** @var \Illuminate\Foundation\Application $instance */ + $instance->offsetUnset($key); + } + + } + /** + * + * + * @see \Illuminate\Contracts\Console\Kernel + */ + class Artisan { + /** + * Run the console application. + * + * @param \Symfony\Component\Console\Input\InputInterface $input + * @param \Symfony\Component\Console\Output\OutputInterface|null $output + * @return int + * @static + */ + public static function handle($input, $output = null) + { //Method inherited from \Illuminate\Foundation\Console\Kernel + /** @var \App\Console\Kernel $instance */ + return $instance->handle($input, $output); + } + /** + * Terminate the application. + * + * @param \Symfony\Component\Console\Input\InputInterface $input + * @param int $status + * @return void + * @static + */ + public static function terminate($input, $status) + { //Method inherited from \Illuminate\Foundation\Console\Kernel + /** @var \App\Console\Kernel $instance */ + $instance->terminate($input, $status); + } + /** + * Register a Closure based command with the application. + * + * @param string $signature + * @param \Closure $callback + * @return \Illuminate\Foundation\Console\ClosureCommand + * @static + */ + public static function command($signature, $callback) + { //Method inherited from \Illuminate\Foundation\Console\Kernel + /** @var \App\Console\Kernel $instance */ + return $instance->command($signature, $callback); + } + /** + * Register the given command with the console application. + * + * @param \Symfony\Component\Console\Command\Command $command + * @return void + * @static + */ + public static function registerCommand($command) + { //Method inherited from \Illuminate\Foundation\Console\Kernel + /** @var \App\Console\Kernel $instance */ + $instance->registerCommand($command); + } + /** + * Run an Artisan console command by name. + * + * @param string $command + * @param array $parameters + * @param \Symfony\Component\Console\Output\OutputInterface|null $outputBuffer + * @return int + * @throws \Symfony\Component\Console\Exception\CommandNotFoundException + * @static + */ + public static function call($command, $parameters = [], $outputBuffer = null) + { //Method inherited from \Illuminate\Foundation\Console\Kernel + /** @var \App\Console\Kernel $instance */ + return $instance->call($command, $parameters, $outputBuffer); + } + /** + * Queue the given console command. + * + * @param string $command + * @param array $parameters + * @return \Illuminate\Foundation\Bus\PendingDispatch + * @static + */ + public static function queue($command, $parameters = []) + { //Method inherited from \Illuminate\Foundation\Console\Kernel + /** @var \App\Console\Kernel $instance */ + return $instance->queue($command, $parameters); + } + /** + * Get all of the commands registered with the console. + * + * @return array + * @static + */ + public static function all() + { //Method inherited from \Illuminate\Foundation\Console\Kernel + /** @var \App\Console\Kernel $instance */ + return $instance->all(); + } + /** + * Get the output for the last run command. + * + * @return string + * @static + */ + public static function output() + { //Method inherited from \Illuminate\Foundation\Console\Kernel + /** @var \App\Console\Kernel $instance */ + return $instance->output(); + } + /** + * Bootstrap the application for artisan commands. + * + * @return void + * @static + */ + public static function bootstrap() + { //Method inherited from \Illuminate\Foundation\Console\Kernel + /** @var \App\Console\Kernel $instance */ + $instance->bootstrap(); + } + /** + * Set the Artisan application instance. + * + * @param \Illuminate\Console\Application $artisan + * @return void + * @static + */ + public static function setArtisan($artisan) + { //Method inherited from \Illuminate\Foundation\Console\Kernel + /** @var \App\Console\Kernel $instance */ + $instance->setArtisan($artisan); + } + + } + /** + * + * + * @see \Illuminate\Auth\AuthManager + * @see \Illuminate\Contracts\Auth\Factory + * @see \Illuminate\Contracts\Auth\Guard + * @see \Illuminate\Contracts\Auth\StatefulGuard + */ + class Auth { + /** + * Attempt to get the guard from the local cache. + * + * @param string|null $name + * @return \Illuminate\Contracts\Auth\Guard|\Illuminate\Contracts\Auth\StatefulGuard + * @static + */ + public static function guard($name = null) + { + /** @var \Illuminate\Auth\AuthManager $instance */ + return $instance->guard($name); + } + /** + * Create a session based authentication guard. + * + * @param string $name + * @param array $config + * @return \Illuminate\Auth\SessionGuard + * @static + */ + public static function createSessionDriver($name, $config) + { + /** @var \Illuminate\Auth\AuthManager $instance */ + return $instance->createSessionDriver($name, $config); + } + /** + * Create a token based authentication guard. + * + * @param string $name + * @param array $config + * @return \Illuminate\Auth\TokenGuard + * @static + */ + public static function createTokenDriver($name, $config) + { + /** @var \Illuminate\Auth\AuthManager $instance */ + return $instance->createTokenDriver($name, $config); + } + /** + * Get the default authentication driver name. + * + * @return string + * @static + */ + public static function getDefaultDriver() + { + /** @var \Illuminate\Auth\AuthManager $instance */ + return $instance->getDefaultDriver(); + } + /** + * Set the default guard driver the factory should serve. + * + * @param string $name + * @return void + * @static + */ + public static function shouldUse($name) + { + /** @var \Illuminate\Auth\AuthManager $instance */ + $instance->shouldUse($name); + } + /** + * Set the default authentication driver name. + * + * @param string $name + * @return void + * @static + */ + public static function setDefaultDriver($name) + { + /** @var \Illuminate\Auth\AuthManager $instance */ + $instance->setDefaultDriver($name); + } + /** + * Register a new callback based request guard. + * + * @param string $driver + * @param callable $callback + * @return \Illuminate\Auth\AuthManager + * @static + */ + public static function viaRequest($driver, $callback) + { + /** @var \Illuminate\Auth\AuthManager $instance */ + return $instance->viaRequest($driver, $callback); + } + /** + * Get the user resolver callback. + * + * @return \Closure + * @static + */ + public static function userResolver() + { + /** @var \Illuminate\Auth\AuthManager $instance */ + return $instance->userResolver(); + } + /** + * Set the callback to be used to resolve users. + * + * @param \Closure $userResolver + * @return \Illuminate\Auth\AuthManager + * @static + */ + public static function resolveUsersUsing($userResolver) + { + /** @var \Illuminate\Auth\AuthManager $instance */ + return $instance->resolveUsersUsing($userResolver); + } + /** + * Register a custom driver creator Closure. + * + * @param string $driver + * @param \Closure $callback + * @return \Illuminate\Auth\AuthManager + * @static + */ + public static function extend($driver, $callback) + { + /** @var \Illuminate\Auth\AuthManager $instance */ + return $instance->extend($driver, $callback); + } + /** + * Register a custom provider creator Closure. + * + * @param string $name + * @param \Closure $callback + * @return \Illuminate\Auth\AuthManager + * @static + */ + public static function provider($name, $callback) + { + /** @var \Illuminate\Auth\AuthManager $instance */ + return $instance->provider($name, $callback); + } + /** + * Determines if any guards have already been resolved. + * + * @return bool + * @static + */ + public static function hasResolvedGuards() + { + /** @var \Illuminate\Auth\AuthManager $instance */ + return $instance->hasResolvedGuards(); + } + /** + * Create the user provider implementation for the driver. + * + * @param string|null $provider + * @return \Illuminate\Contracts\Auth\UserProvider|null + * @throws \InvalidArgumentException + * @static + */ + public static function createUserProvider($provider = null) + { + /** @var \Illuminate\Auth\AuthManager $instance */ + return $instance->createUserProvider($provider); + } + /** + * Get the default user provider name. + * + * @return string + * @static + */ + public static function getDefaultUserProvider() + { + /** @var \Illuminate\Auth\AuthManager $instance */ + return $instance->getDefaultUserProvider(); + } + /** + * Get the currently authenticated user. + * + * @return \LaraBB\User\Models\User|null + * @static + */ + public static function user() + { + /** @var \Illuminate\Auth\SessionGuard $instance */ + return $instance->user(); + } + /** + * Get the ID for the currently authenticated user. + * + * @return int|string|null + * @static + */ + public static function id() + { + /** @var \Illuminate\Auth\SessionGuard $instance */ + return $instance->id(); + } + /** + * Log a user into the application without sessions or cookies. + * + * @param array $credentials + * @return bool + * @static + */ + public static function once($credentials = []) + { + /** @var \Illuminate\Auth\SessionGuard $instance */ + return $instance->once($credentials); + } + /** + * Log the given user ID into the application without sessions or cookies. + * + * @param mixed $id + * @return \LaraBB\User\Models\User|false + * @static + */ + public static function onceUsingId($id) + { + /** @var \Illuminate\Auth\SessionGuard $instance */ + return $instance->onceUsingId($id); + } + /** + * Validate a user's credentials. + * + * @param array $credentials + * @return bool + * @static + */ + public static function validate($credentials = []) + { + /** @var \Illuminate\Auth\SessionGuard $instance */ + return $instance->validate($credentials); + } + /** + * Attempt to authenticate using HTTP Basic Auth. + * + * @param string $field + * @param array $extraConditions + * @return \Symfony\Component\HttpFoundation\Response|null + * @static + */ + public static function basic($field = 'email', $extraConditions = []) + { + /** @var \Illuminate\Auth\SessionGuard $instance */ + return $instance->basic($field, $extraConditions); + } + /** + * Perform a stateless HTTP Basic login attempt. + * + * @param string $field + * @param array $extraConditions + * @return \Symfony\Component\HttpFoundation\Response|null + * @static + */ + public static function onceBasic($field = 'email', $extraConditions = []) + { + /** @var \Illuminate\Auth\SessionGuard $instance */ + return $instance->onceBasic($field, $extraConditions); + } + /** + * Attempt to authenticate a user using the given credentials. + * + * @param array $credentials + * @param bool $remember + * @return bool + * @static + */ + public static function attempt($credentials = [], $remember = false) + { + /** @var \Illuminate\Auth\SessionGuard $instance */ + return $instance->attempt($credentials, $remember); + } + /** + * Log the given user ID into the application. + * + * @param mixed $id + * @param bool $remember + * @return \LaraBB\User\Models\User|false + * @static + */ + public static function loginUsingId($id, $remember = false) + { + /** @var \Illuminate\Auth\SessionGuard $instance */ + return $instance->loginUsingId($id, $remember); + } + /** + * Log a user into the application. + * + * @param \Illuminate\Contracts\Auth\Authenticatable $user + * @param bool $remember + * @return void + * @static + */ + public static function login($user, $remember = false) + { + /** @var \Illuminate\Auth\SessionGuard $instance */ + $instance->login($user, $remember); + } + /** + * Log the user out of the application. + * + * @return void + * @static + */ + public static function logout() + { + /** @var \Illuminate\Auth\SessionGuard $instance */ + $instance->logout(); + } + /** + * Log the user out of the application on their current device only. + * + * @return void + * @static + */ + public static function logoutCurrentDevice() + { + /** @var \Illuminate\Auth\SessionGuard $instance */ + $instance->logoutCurrentDevice(); + } + /** + * Invalidate other sessions for the current user. + * + * The application must be using the AuthenticateSession middleware. + * + * @param string $password + * @param string $attribute + * @return bool|null + * @static + */ + public static function logoutOtherDevices($password, $attribute = 'password') + { + /** @var \Illuminate\Auth\SessionGuard $instance */ + return $instance->logoutOtherDevices($password, $attribute); + } + /** + * Register an authentication attempt event listener. + * + * @param mixed $callback + * @return void + * @static + */ + public static function attempting($callback) + { + /** @var \Illuminate\Auth\SessionGuard $instance */ + $instance->attempting($callback); + } + /** + * Get the last user we attempted to authenticate. + * + * @return \LaraBB\User\Models\User + * @static + */ + public static function getLastAttempted() + { + /** @var \Illuminate\Auth\SessionGuard $instance */ + return $instance->getLastAttempted(); + } + /** + * Get a unique identifier for the auth session value. + * + * @return string + * @static + */ + public static function getName() + { + /** @var \Illuminate\Auth\SessionGuard $instance */ + return $instance->getName(); + } + /** + * Get the name of the cookie used to store the "recaller". + * + * @return string + * @static + */ + public static function getRecallerName() + { + /** @var \Illuminate\Auth\SessionGuard $instance */ + return $instance->getRecallerName(); + } + /** + * Determine if the user was authenticated via "remember me" cookie. + * + * @return bool + * @static + */ + public static function viaRemember() + { + /** @var \Illuminate\Auth\SessionGuard $instance */ + return $instance->viaRemember(); + } + /** + * Get the cookie creator instance used by the guard. + * + * @return \Illuminate\Contracts\Cookie\QueueingFactory + * @throws \RuntimeException + * @static + */ + public static function getCookieJar() + { + /** @var \Illuminate\Auth\SessionGuard $instance */ + return $instance->getCookieJar(); + } + /** + * Set the cookie creator instance used by the guard. + * + * @param \Illuminate\Contracts\Cookie\QueueingFactory $cookie + * @return void + * @static + */ + public static function setCookieJar($cookie) + { + /** @var \Illuminate\Auth\SessionGuard $instance */ + $instance->setCookieJar($cookie); + } + /** + * Get the event dispatcher instance. + * + * @return \Illuminate\Contracts\Events\Dispatcher + * @static + */ + public static function getDispatcher() + { + /** @var \Illuminate\Auth\SessionGuard $instance */ + return $instance->getDispatcher(); + } + /** + * Set the event dispatcher instance. + * + * @param \Illuminate\Contracts\Events\Dispatcher $events + * @return void + * @static + */ + public static function setDispatcher($events) + { + /** @var \Illuminate\Auth\SessionGuard $instance */ + $instance->setDispatcher($events); + } + /** + * Get the session store used by the guard. + * + * @return \Illuminate\Contracts\Session\Session + * @static + */ + public static function getSession() + { + /** @var \Illuminate\Auth\SessionGuard $instance */ + return $instance->getSession(); + } + /** + * Return the currently cached user. + * + * @return \LaraBB\User\Models\User|null + * @static + */ + public static function getUser() + { + /** @var \Illuminate\Auth\SessionGuard $instance */ + return $instance->getUser(); + } + /** + * Set the current user. + * + * @param \Illuminate\Contracts\Auth\Authenticatable $user + * @return \Illuminate\Auth\SessionGuard + * @static + */ + public static function setUser($user) + { + /** @var \Illuminate\Auth\SessionGuard $instance */ + return $instance->setUser($user); + } + /** + * Get the current request instance. + * + * @return \Symfony\Component\HttpFoundation\Request + * @static + */ + public static function getRequest() + { + /** @var \Illuminate\Auth\SessionGuard $instance */ + return $instance->getRequest(); + } + /** + * Set the current request instance. + * + * @param \Symfony\Component\HttpFoundation\Request $request + * @return \Illuminate\Auth\SessionGuard + * @static + */ + public static function setRequest($request) + { + /** @var \Illuminate\Auth\SessionGuard $instance */ + return $instance->setRequest($request); + } + /** + * Determine if current user is authenticated. If not, throw an exception. + * + * @return \LaraBB\User\Models\User + * @throws \Illuminate\Auth\AuthenticationException + * @static + */ + public static function authenticate() + { + /** @var \Illuminate\Auth\SessionGuard $instance */ + return $instance->authenticate(); + } + /** + * Determine if the guard has a user instance. + * + * @return bool + * @static + */ + public static function hasUser() + { + /** @var \Illuminate\Auth\SessionGuard $instance */ + return $instance->hasUser(); + } + /** + * Determine if the current user is authenticated. + * + * @return bool + * @static + */ + public static function check() + { + /** @var \Illuminate\Auth\SessionGuard $instance */ + return $instance->check(); + } + /** + * Determine if the current user is a guest. + * + * @return bool + * @static + */ + public static function guest() + { + /** @var \Illuminate\Auth\SessionGuard $instance */ + return $instance->guest(); + } + /** + * Get the user provider used by the guard. + * + * @return \Illuminate\Contracts\Auth\UserProvider + * @static + */ + public static function getProvider() + { + /** @var \Illuminate\Auth\SessionGuard $instance */ + return $instance->getProvider(); + } + /** + * Set the user provider used by the guard. + * + * @param \Illuminate\Contracts\Auth\UserProvider $provider + * @return void + * @static + */ + public static function setProvider($provider) + { + /** @var \Illuminate\Auth\SessionGuard $instance */ + $instance->setProvider($provider); + } + /** + * Register a custom macro. + * + * @param string $name + * @param object|callable $macro + * @return void + * @static + */ + public static function macro($name, $macro) + { + \Illuminate\Auth\SessionGuard::macro($name, $macro); + } + /** + * Mix another object into the class. + * + * @param object $mixin + * @param bool $replace + * @return void + * @throws \ReflectionException + * @static + */ + public static function mixin($mixin, $replace = true) + { + \Illuminate\Auth\SessionGuard::mixin($mixin, $replace); + } + /** + * Checks if macro is registered. + * + * @param string $name + * @return bool + * @static + */ + public static function hasMacro($name) + { + return \Illuminate\Auth\SessionGuard::hasMacro($name); + } + + } + /** + * + * + * @see \Illuminate\View\Compilers\BladeCompiler + */ + class Blade { + /** + * Compile the view at the given path. + * + * @param string|null $path + * @return void + * @static + */ + public static function compile($path = null) + { + /** @var \Illuminate\View\Compilers\BladeCompiler $instance */ + $instance->compile($path); + } + /** + * Get the path currently being compiled. + * + * @return string + * @static + */ + public static function getPath() + { + /** @var \Illuminate\View\Compilers\BladeCompiler $instance */ + return $instance->getPath(); + } + /** + * Set the path currently being compiled. + * + * @param string $path + * @return void + * @static + */ + public static function setPath($path) + { + /** @var \Illuminate\View\Compilers\BladeCompiler $instance */ + $instance->setPath($path); + } + /** + * Compile the given Blade template contents. + * + * @param string $value + * @return string + * @static + */ + public static function compileString($value) + { + /** @var \Illuminate\View\Compilers\BladeCompiler $instance */ + return $instance->compileString($value); + } + /** + * Strip the parentheses from the given expression. + * + * @param string $expression + * @return string + * @static + */ + public static function stripParentheses($expression) + { + /** @var \Illuminate\View\Compilers\BladeCompiler $instance */ + return $instance->stripParentheses($expression); + } + /** + * Register a custom Blade compiler. + * + * @param callable $compiler + * @return void + * @static + */ + public static function extend($compiler) + { + /** @var \Illuminate\View\Compilers\BladeCompiler $instance */ + $instance->extend($compiler); + } + /** + * Get the extensions used by the compiler. + * + * @return array + * @static + */ + public static function getExtensions() + { + /** @var \Illuminate\View\Compilers\BladeCompiler $instance */ + return $instance->getExtensions(); + } + /** + * Register an "if" statement directive. + * + * @param string $name + * @param callable $callback + * @return void + * @static + */ + public static function if($name, $callback) + { + /** @var \Illuminate\View\Compilers\BladeCompiler $instance */ + $instance->if($name, $callback); + } + /** + * Check the result of a condition. + * + * @param string $name + * @param array $parameters + * @return bool + * @static + */ + public static function check($name, ...$parameters) + { + /** @var \Illuminate\View\Compilers\BladeCompiler $instance */ + return $instance->check($name, ...$parameters); + } + /** + * Register a class-based component alias directive. + * + * @param string $class + * @param string|null $alias + * @param string $prefix + * @return void + * @static + */ + public static function component($class, $alias = null, $prefix = '') + { + /** @var \Illuminate\View\Compilers\BladeCompiler $instance */ + $instance->component($class, $alias, $prefix); + } + /** + * Register an array of class-based components. + * + * @param array $components + * @param string $prefix + * @return void + * @static + */ + public static function components($components, $prefix = '') + { + /** @var \Illuminate\View\Compilers\BladeCompiler $instance */ + $instance->components($components, $prefix); + } + /** + * Get the registered class component aliases. + * + * @return array + * @static + */ + public static function getClassComponentAliases() + { + /** @var \Illuminate\View\Compilers\BladeCompiler $instance */ + return $instance->getClassComponentAliases(); + } + /** + * Register a component alias directive. + * + * @param string $path + * @param string|null $alias + * @return void + * @static + */ + public static function aliasComponent($path, $alias = null) + { + /** @var \Illuminate\View\Compilers\BladeCompiler $instance */ + $instance->aliasComponent($path, $alias); + } + /** + * Register an include alias directive. + * + * @param string $path + * @param string|null $alias + * @return void + * @static + */ + public static function include($path, $alias = null) + { + /** @var \Illuminate\View\Compilers\BladeCompiler $instance */ + $instance->include($path, $alias); + } + /** + * Register an include alias directive. + * + * @param string $path + * @param string|null $alias + * @return void + * @static + */ + public static function aliasInclude($path, $alias = null) + { + /** @var \Illuminate\View\Compilers\BladeCompiler $instance */ + $instance->aliasInclude($path, $alias); + } + /** + * Register a handler for custom directives. + * + * @param string $name + * @param callable $handler + * @return void + * @throws \InvalidArgumentException + * @static + */ + public static function directive($name, $handler) + { + /** @var \Illuminate\View\Compilers\BladeCompiler $instance */ + $instance->directive($name, $handler); + } + /** + * Get the list of custom directives. + * + * @return array + * @static + */ + public static function getCustomDirectives() + { + /** @var \Illuminate\View\Compilers\BladeCompiler $instance */ + return $instance->getCustomDirectives(); + } + /** + * Register a new precompiler. + * + * @param callable $precompiler + * @return void + * @static + */ + public static function precompiler($precompiler) + { + /** @var \Illuminate\View\Compilers\BladeCompiler $instance */ + $instance->precompiler($precompiler); + } + /** + * Set the echo format to be used by the compiler. + * + * @param string $format + * @return void + * @static + */ + public static function setEchoFormat($format) + { + /** @var \Illuminate\View\Compilers\BladeCompiler $instance */ + $instance->setEchoFormat($format); + } + /** + * Set the "echo" format to double encode entities. + * + * @return void + * @static + */ + public static function withDoubleEncoding() + { + /** @var \Illuminate\View\Compilers\BladeCompiler $instance */ + $instance->withDoubleEncoding(); + } + /** + * Set the "echo" format to not double encode entities. + * + * @return void + * @static + */ + public static function withoutDoubleEncoding() + { + /** @var \Illuminate\View\Compilers\BladeCompiler $instance */ + $instance->withoutDoubleEncoding(); + } + /** + * Indicate that component tags should not be compiled. + * + * @return void + * @static + */ + public static function withoutComponentTags() + { + /** @var \Illuminate\View\Compilers\BladeCompiler $instance */ + $instance->withoutComponentTags(); + } + /** + * Get the path to the compiled version of a view. + * + * @param string $path + * @return string + * @static + */ + public static function getCompiledPath($path) + { //Method inherited from \Illuminate\View\Compilers\Compiler + /** @var \Illuminate\View\Compilers\BladeCompiler $instance */ + return $instance->getCompiledPath($path); + } + /** + * Determine if the view at the given path is expired. + * + * @param string $path + * @return bool + * @static + */ + public static function isExpired($path) + { //Method inherited from \Illuminate\View\Compilers\Compiler + /** @var \Illuminate\View\Compilers\BladeCompiler $instance */ + return $instance->isExpired($path); + } + /** + * Get a new component hash for a component name. + * + * @param string $component + * @return string + * @static + */ + public static function newComponentHash($component) + { + return \Illuminate\View\Compilers\BladeCompiler::newComponentHash($component); + } + /** + * Compile a class component opening. + * + * @param string $component + * @param string $alias + * @param string $data + * @param string $hash + * @return string + * @static + */ + public static function compileClassComponentOpening($component, $alias, $data, $hash) + { + return \Illuminate\View\Compilers\BladeCompiler::compileClassComponentOpening($component, $alias, $data, $hash); + } + /** + * Compile the end-component statements into valid PHP. + * + * @return string + * @static + */ + public static function compileEndComponentClass() + { + /** @var \Illuminate\View\Compilers\BladeCompiler $instance */ + return $instance->compileEndComponentClass(); + } + /** + * Sanitize the given component attribute value. + * + * @param mixed $value + * @return mixed + * @static + */ + public static function sanitizeComponentAttribute($value) + { + return \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($value); + } + /** + * Compile an end-once block into valid PHP. + * + * @return string + * @static + */ + public static function compileEndOnce() + { + /** @var \Illuminate\View\Compilers\BladeCompiler $instance */ + return $instance->compileEndOnce(); + } + /** + * Compile Blade echos into valid PHP. + * + * @param string $value + * @return string + * @static + */ + public static function compileEchos($value) + { + /** @var \Illuminate\View\Compilers\BladeCompiler $instance */ + return $instance->compileEchos($value); + } + + } + /** + * + * + * @method static \Illuminate\Broadcasting\Broadcasters\Broadcaster channel(string $channel, callable|string $callback, array $options = []) + * @method static mixed auth(\Illuminate\Http\Request $request) + * @see \Illuminate\Contracts\Broadcasting\Factory + */ + class Broadcast { + /** + * Register the routes for handling broadcast authentication and sockets. + * + * @param array|null $attributes + * @return void + * @static + */ + public static function routes($attributes = null) + { + /** @var \Illuminate\Broadcasting\BroadcastManager $instance */ + $instance->routes($attributes); + } + /** + * Get the socket ID for the given request. + * + * @param \Illuminate\Http\Request|null $request + * @return string|null + * @static + */ + public static function socket($request = null) + { + /** @var \Illuminate\Broadcasting\BroadcastManager $instance */ + return $instance->socket($request); + } + /** + * Begin broadcasting an event. + * + * @param mixed|null $event + * @return \Illuminate\Broadcasting\PendingBroadcast + * @static + */ + public static function event($event = null) + { + /** @var \Illuminate\Broadcasting\BroadcastManager $instance */ + return $instance->event($event); + } + /** + * Queue the given event for broadcast. + * + * @param mixed $event + * @return void + * @static + */ + public static function queue($event) + { + /** @var \Illuminate\Broadcasting\BroadcastManager $instance */ + $instance->queue($event); + } + /** + * Get a driver instance. + * + * @param string|null $driver + * @return mixed + * @static + */ + public static function connection($driver = null) + { + /** @var \Illuminate\Broadcasting\BroadcastManager $instance */ + return $instance->connection($driver); + } + /** + * Get a driver instance. + * + * @param string|null $name + * @return mixed + * @static + */ + public static function driver($name = null) + { + /** @var \Illuminate\Broadcasting\BroadcastManager $instance */ + return $instance->driver($name); + } + /** + * Get the default driver name. + * + * @return string + * @static + */ + public static function getDefaultDriver() + { + /** @var \Illuminate\Broadcasting\BroadcastManager $instance */ + return $instance->getDefaultDriver(); + } + /** + * Set the default driver name. + * + * @param string $name + * @return void + * @static + */ + public static function setDefaultDriver($name) + { + /** @var \Illuminate\Broadcasting\BroadcastManager $instance */ + $instance->setDefaultDriver($name); + } + /** + * Register a custom driver creator Closure. + * + * @param string $driver + * @param \Closure $callback + * @return \Illuminate\Broadcasting\BroadcastManager + * @static + */ + public static function extend($driver, $callback) + { + /** @var \Illuminate\Broadcasting\BroadcastManager $instance */ + return $instance->extend($driver, $callback); + } + + } + /** + * + * + * @see \Illuminate\Contracts\Bus\Dispatcher + */ + class Bus { + /** + * Dispatch a command to its appropriate handler. + * + * @param mixed $command + * @return mixed + * @static + */ + public static function dispatch($command) + { + /** @var \Illuminate\Bus\Dispatcher $instance */ + return $instance->dispatch($command); + } + /** + * Dispatch a command to its appropriate handler in the current process. + * + * @param mixed $command + * @param mixed $handler + * @return mixed + * @static + */ + public static function dispatchNow($command, $handler = null) + { + /** @var \Illuminate\Bus\Dispatcher $instance */ + return $instance->dispatchNow($command, $handler); + } + /** + * Determine if the given command has a handler. + * + * @param mixed $command + * @return bool + * @static + */ + public static function hasCommandHandler($command) + { + /** @var \Illuminate\Bus\Dispatcher $instance */ + return $instance->hasCommandHandler($command); + } + /** + * Retrieve the handler for a command. + * + * @param mixed $command + * @return bool|mixed + * @static + */ + public static function getCommandHandler($command) + { + /** @var \Illuminate\Bus\Dispatcher $instance */ + return $instance->getCommandHandler($command); + } + /** + * Dispatch a command to its appropriate handler behind a queue. + * + * @param mixed $command + * @return mixed + * @static + */ + public static function dispatchToQueue($command) + { + /** @var \Illuminate\Bus\Dispatcher $instance */ + return $instance->dispatchToQueue($command); + } + /** + * Dispatch a command to its appropriate handler after the current process. + * + * @param mixed $command + * @param mixed $handler + * @return void + * @static + */ + public static function dispatchAfterResponse($command, $handler = null) + { + /** @var \Illuminate\Bus\Dispatcher $instance */ + $instance->dispatchAfterResponse($command, $handler); + } + /** + * Set the pipes through which commands should be piped before dispatching. + * + * @param array $pipes + * @return \Illuminate\Bus\Dispatcher + * @static + */ + public static function pipeThrough($pipes) + { + /** @var \Illuminate\Bus\Dispatcher $instance */ + return $instance->pipeThrough($pipes); + } + /** + * Map a command to a handler. + * + * @param array $map + * @return \Illuminate\Bus\Dispatcher + * @static + */ + public static function map($map) + { + /** @var \Illuminate\Bus\Dispatcher $instance */ + return $instance->map($map); + } + /** + * Assert if a job was dispatched based on a truth-test callback. + * + * @param string|\Closure $command + * @param callable|int|null $callback + * @return void + * @static + */ + public static function assertDispatched($command, $callback = null) + { + /** @var \Illuminate\Support\Testing\Fakes\BusFake $instance */ + $instance->assertDispatched($command, $callback); + } + /** + * Assert if a job was pushed a number of times. + * + * @param string $command + * @param int $times + * @return void + * @static + */ + public static function assertDispatchedTimes($command, $times = 1) + { + /** @var \Illuminate\Support\Testing\Fakes\BusFake $instance */ + $instance->assertDispatchedTimes($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 assertNotDispatched($command, $callback = null) + { + /** @var \Illuminate\Support\Testing\Fakes\BusFake $instance */ + $instance->assertNotDispatched($command, $callback); + } + /** + * Assert if a job was dispatched after the response was sent based on a truth-test callback. + * + * @param string|\Closure $command + * @param callable|int|null $callback + * @return void + * @static + */ + public static function assertDispatchedAfterResponse($command, $callback = null) + { + /** @var \Illuminate\Support\Testing\Fakes\BusFake $instance */ + $instance->assertDispatchedAfterResponse($command, $callback); + } + /** + * Assert if a job was pushed after the response was sent a number of times. + * + * @param string $command + * @param int $times + * @return void + * @static + */ + public static function assertDispatchedAfterResponseTimes($command, $times = 1) + { + /** @var \Illuminate\Support\Testing\Fakes\BusFake $instance */ + $instance->assertDispatchedAfterResponseTimes($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 assertNotDispatchedAfterResponse($command, $callback = null) + { + /** @var \Illuminate\Support\Testing\Fakes\BusFake $instance */ + $instance->assertNotDispatchedAfterResponse($command, $callback); + } + /** + * Get all of the jobs matching a truth-test callback. + * + * @param string $command + * @param callable|null $callback + * @return \Illuminate\Support\Collection + * @static + */ + public static function dispatched($command, $callback = null) + { + /** @var \Illuminate\Support\Testing\Fakes\BusFake $instance */ + return $instance->dispatched($command, $callback); + } + /** + * Get all of the jobs dispatched after the response was sent matching a truth-test callback. + * + * @param string $command + * @param callable|null $callback + * @return \Illuminate\Support\Collection + * @static + */ + public static function dispatchedAfterResponse($command, $callback = null) + { + /** @var \Illuminate\Support\Testing\Fakes\BusFake $instance */ + return $instance->dispatchedAfterResponse($command, $callback); + } + /** + * Determine if there are any stored commands for a given class. + * + * @param string $command + * @return bool + * @static + */ + public static function hasDispatched($command) + { + /** @var \Illuminate\Support\Testing\Fakes\BusFake $instance */ + return $instance->hasDispatched($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 */ + return $instance->hasDispatchedAfterResponse($command); + } + + } + /** + * + * + * @method static \Illuminate\Contracts\Cache\Lock lock(string $name, int $seconds = 0, mixed $owner = null) + * @method static \Illuminate\Contracts\Cache\Lock restoreLock(string $name, string $owner) + * @see \Illuminate\Cache\CacheManager + * @see \Illuminate\Cache\Repository + */ + class Cache { + /** + * Get a cache store instance by name, wrapped in a repository. + * + * @param string|null $name + * @return \Illuminate\Contracts\Cache\Repository + * @static + */ + public static function store($name = null) + { + /** @var \Illuminate\Cache\CacheManager $instance */ + return $instance->store($name); + } + /** + * Get a cache driver instance. + * + * @param string|null $driver + * @return \Illuminate\Contracts\Cache\Repository + * @static + */ + public static function driver($driver = null) + { + /** @var \Illuminate\Cache\CacheManager $instance */ + return $instance->driver($driver); + } + /** + * Create a new cache repository with the given implementation. + * + * @param \Illuminate\Contracts\Cache\Store $store + * @return \Illuminate\Cache\Repository + * @static + */ + public static function repository($store) + { + /** @var \Illuminate\Cache\CacheManager $instance */ + return $instance->repository($store); + } + /** + * Re-set the event dispatcher on all resolved cache repositories. + * + * @return void + * @static + */ + public static function refreshEventDispatcher() + { + /** @var \Illuminate\Cache\CacheManager $instance */ + $instance->refreshEventDispatcher(); + } + /** + * Get the default cache driver name. + * + * @return string + * @static + */ + public static function getDefaultDriver() + { + /** @var \Illuminate\Cache\CacheManager $instance */ + return $instance->getDefaultDriver(); + } + /** + * Set the default cache driver name. + * + * @param string $name + * @return void + * @static + */ + public static function setDefaultDriver($name) + { + /** @var \Illuminate\Cache\CacheManager $instance */ + $instance->setDefaultDriver($name); + } + /** + * Unset the given driver instances. + * + * @param array|string|null $name + * @return \Illuminate\Cache\CacheManager + * @static + */ + public static function forgetDriver($name = null) + { + /** @var \Illuminate\Cache\CacheManager $instance */ + return $instance->forgetDriver($name); + } + /** + * Register a custom driver creator Closure. + * + * @param string $driver + * @param \Closure $callback + * @return \Illuminate\Cache\CacheManager + * @static + */ + public static function extend($driver, $callback) + { + /** @var \Illuminate\Cache\CacheManager $instance */ + return $instance->extend($driver, $callback); + } + /** + * Determine if an item exists in the cache. + * + * @param string $key + * @return bool + * @static + */ + public static function has($key) + { + /** @var \Illuminate\Cache\Repository $instance */ + return $instance->has($key); + } + /** + * Determine if an item doesn't exist in the cache. + * + * @param string $key + * @return bool + * @static + */ + public static function missing($key) + { + /** @var \Illuminate\Cache\Repository $instance */ + return $instance->missing($key); + } + /** + * Retrieve an item from the cache by key. + * + * @param string $key + * @param mixed $default + * @return mixed + * @static + */ + public static function get($key, $default = null) + { + /** @var \Illuminate\Cache\Repository $instance */ + return $instance->get($key, $default); + } + /** + * Retrieve multiple items from the cache by key. + * + * Items not found in the cache will have a null value. + * + * @param array $keys + * @return array + * @static + */ + public static function many($keys) + { + /** @var \Illuminate\Cache\Repository $instance */ + return $instance->many($keys); + } + /** + * Obtains multiple cache items by their unique keys. + * + * @param \Psr\SimpleCache\iterable $keys A list of keys that can obtained in a single operation. + * @param mixed $default Default value to return for keys that do not exist. + * @return \Psr\SimpleCache\iterable A list of key => value pairs. Cache keys that do not exist or are stale will have $default as value. + * @throws \Psr\SimpleCache\InvalidArgumentException + * MUST be thrown if $keys is neither an array nor a Traversable, + * or if any of the $keys are not a legal value. + * @static + */ + public static function getMultiple($keys, $default = null) + { + /** @var \Illuminate\Cache\Repository $instance */ + return $instance->getMultiple($keys, $default); + } + /** + * Retrieve an item from the cache and delete it. + * + * @param string $key + * @param mixed $default + * @return mixed + * @static + */ + public static function pull($key, $default = null) + { + /** @var \Illuminate\Cache\Repository $instance */ + return $instance->pull($key, $default); + } + /** + * Store an item in the cache. + * + * @param string $key + * @param mixed $value + * @param \DateTimeInterface|\DateInterval|int|null $ttl + * @return bool + * @static + */ + public static function put($key, $value, $ttl = null) + { + /** @var \Illuminate\Cache\Repository $instance */ + return $instance->put($key, $value, $ttl); + } + /** + * Persists data in the cache, uniquely referenced by a key with an optional expiration TTL time. + * + * @param string $key The key of the item to store. + * @param mixed $value The value of the item to store, must be serializable. + * @param null|int|\DateInterval $ttl Optional. The TTL value of this item. If no value is sent and + * the driver supports TTL then the library may set a default value + * for it or let the driver take care of that. + * @return bool True on success and false on failure. + * @throws \Psr\SimpleCache\InvalidArgumentException + * MUST be thrown if the $key string is not a legal value. + * @static + */ + public static function set($key, $value, $ttl = null) + { + /** @var \Illuminate\Cache\Repository $instance */ + return $instance->set($key, $value, $ttl); + } + /** + * Store multiple items in the cache for a given number of seconds. + * + * @param array $values + * @param \DateTimeInterface|\DateInterval|int|null $ttl + * @return bool + * @static + */ + public static function putMany($values, $ttl = null) + { + /** @var \Illuminate\Cache\Repository $instance */ + return $instance->putMany($values, $ttl); + } + /** + * Persists a set of key => value pairs in the cache, with an optional TTL. + * + * @param \Psr\SimpleCache\iterable $values A list of key => value pairs for a multiple-set operation. + * @param null|int|\DateInterval $ttl Optional. The TTL value of this item. If no value is sent and + * the driver supports TTL then the library may set a default value + * for it or let the driver take care of that. + * @return bool True on success and false on failure. + * @throws \Psr\SimpleCache\InvalidArgumentException + * MUST be thrown if $values is neither an array nor a Traversable, + * or if any of the $values are not a legal value. + * @static + */ + public static function setMultiple($values, $ttl = null) + { + /** @var \Illuminate\Cache\Repository $instance */ + return $instance->setMultiple($values, $ttl); + } + /** + * Store an item in the cache if the key does not exist. + * + * @param string $key + * @param mixed $value + * @param \DateTimeInterface|\DateInterval|int|null $ttl + * @return bool + * @static + */ + public static function add($key, $value, $ttl = null) + { + /** @var \Illuminate\Cache\Repository $instance */ + return $instance->add($key, $value, $ttl); + } + /** + * Increment the value of an item in the cache. + * + * @param string $key + * @param mixed $value + * @return int|bool + * @static + */ + public static function increment($key, $value = 1) + { + /** @var \Illuminate\Cache\Repository $instance */ + return $instance->increment($key, $value); + } + /** + * Decrement the value of an item in the cache. + * + * @param string $key + * @param mixed $value + * @return int|bool + * @static + */ + public static function decrement($key, $value = 1) + { + /** @var \Illuminate\Cache\Repository $instance */ + return $instance->decrement($key, $value); + } + /** + * Store an item in the cache indefinitely. + * + * @param string $key + * @param mixed $value + * @return bool + * @static + */ + public static function forever($key, $value) + { + /** @var \Illuminate\Cache\Repository $instance */ + return $instance->forever($key, $value); + } + /** + * Get an item from the cache, or execute the given Closure and store the result. + * + * @param string $key + * @param \DateTimeInterface|\DateInterval|int|null $ttl + * @param \Closure $callback + * @return mixed + * @static + */ + public static function remember($key, $ttl, $callback) + { + /** @var \Illuminate\Cache\Repository $instance */ + return $instance->remember($key, $ttl, $callback); + } + /** + * Get an item from the cache, or execute the given Closure and store the result forever. + * + * @param string $key + * @param \Closure $callback + * @return mixed + * @static + */ + public static function sear($key, $callback) + { + /** @var \Illuminate\Cache\Repository $instance */ + return $instance->sear($key, $callback); + } + /** + * Get an item from the cache, or execute the given Closure and store the result forever. + * + * @param string $key + * @param \Closure $callback + * @return mixed + * @static + */ + public static function rememberForever($key, $callback) + { + /** @var \Illuminate\Cache\Repository $instance */ + return $instance->rememberForever($key, $callback); + } + /** + * Remove an item from the cache. + * + * @param string $key + * @return bool + * @static + */ + public static function forget($key) + { + /** @var \Illuminate\Cache\Repository $instance */ + return $instance->forget($key); + } + /** + * Delete an item from the cache by its unique key. + * + * @param string $key The unique cache key of the item to delete. + * @return bool True if the item was successfully removed. False if there was an error. + * @throws \Psr\SimpleCache\InvalidArgumentException + * MUST be thrown if the $key string is not a legal value. + * @static + */ + public static function delete($key) + { + /** @var \Illuminate\Cache\Repository $instance */ + return $instance->delete($key); + } + /** + * Deletes multiple cache items in a single operation. + * + * @param \Psr\SimpleCache\iterable $keys A list of string-based keys to be deleted. + * @return bool True if the items were successfully removed. False if there was an error. + * @throws \Psr\SimpleCache\InvalidArgumentException + * MUST be thrown if $keys is neither an array nor a Traversable, + * or if any of the $keys are not a legal value. + * @static + */ + public static function deleteMultiple($keys) + { + /** @var \Illuminate\Cache\Repository $instance */ + return $instance->deleteMultiple($keys); + } + /** + * Wipes clean the entire cache's keys. + * + * @return bool True on success and false on failure. + * @static + */ + public static function clear() + { + /** @var \Illuminate\Cache\Repository $instance */ + return $instance->clear(); + } + /** + * Begin executing a new tags operation if the store supports it. + * + * @param array|mixed $names + * @return \Illuminate\Cache\TaggedCache + * @throws \BadMethodCallException + * @static + */ + public static function tags($names) + { + /** @var \Illuminate\Cache\Repository $instance */ + return $instance->tags($names); + } + /** + * Get the default cache time. + * + * @return int|null + * @static + */ + public static function getDefaultCacheTime() + { + /** @var \Illuminate\Cache\Repository $instance */ + return $instance->getDefaultCacheTime(); + } + /** + * Set the default cache time in seconds. + * + * @param int|null $seconds + * @return \Illuminate\Cache\Repository + * @static + */ + public static function setDefaultCacheTime($seconds) + { + /** @var \Illuminate\Cache\Repository $instance */ + return $instance->setDefaultCacheTime($seconds); + } + /** + * Get the cache store implementation. + * + * @return \Illuminate\Contracts\Cache\Store + * @static + */ + public static function getStore() + { + /** @var \Illuminate\Cache\Repository $instance */ + return $instance->getStore(); + } + /** + * Get the event dispatcher instance. + * + * @return \Illuminate\Contracts\Events\Dispatcher + * @static + */ + public static function getEventDispatcher() + { + /** @var \Illuminate\Cache\Repository $instance */ + return $instance->getEventDispatcher(); + } + /** + * Set the event dispatcher instance. + * + * @param \Illuminate\Contracts\Events\Dispatcher $events + * @return void + * @static + */ + public static function setEventDispatcher($events) + { + /** @var \Illuminate\Cache\Repository $instance */ + $instance->setEventDispatcher($events); + } + /** + * Determine if a cached value exists. + * + * @param string $key + * @return bool + * @static + */ + public static function offsetExists($key) + { + /** @var \Illuminate\Cache\Repository $instance */ + return $instance->offsetExists($key); + } + /** + * Retrieve an item from the cache by key. + * + * @param string $key + * @return mixed + * @static + */ + public static function offsetGet($key) + { + /** @var \Illuminate\Cache\Repository $instance */ + return $instance->offsetGet($key); + } + /** + * Store an item in the cache for the default time. + * + * @param string $key + * @param mixed $value + * @return void + * @static + */ + public static function offsetSet($key, $value) + { + /** @var \Illuminate\Cache\Repository $instance */ + $instance->offsetSet($key, $value); + } + /** + * Remove an item from the cache. + * + * @param string $key + * @return void + * @static + */ + public static function offsetUnset($key) + { + /** @var \Illuminate\Cache\Repository $instance */ + $instance->offsetUnset($key); + } + /** + * Register a custom macro. + * + * @param string $name + * @param object|callable $macro + * @return void + * @static + */ + public static function macro($name, $macro) + { + \Illuminate\Cache\Repository::macro($name, $macro); + } + /** + * Mix another object into the class. + * + * @param object $mixin + * @param bool $replace + * @return void + * @throws \ReflectionException + * @static + */ + public static function mixin($mixin, $replace = true) + { + \Illuminate\Cache\Repository::mixin($mixin, $replace); + } + /** + * Checks if macro is registered. + * + * @param string $name + * @return bool + * @static + */ + public static function hasMacro($name) + { + return \Illuminate\Cache\Repository::hasMacro($name); + } + /** + * Dynamically handle calls to the class. + * + * @param string $method + * @param array $parameters + * @return mixed + * @throws \BadMethodCallException + * @static + */ + public static function macroCall($method, $parameters) + { + /** @var \Illuminate\Cache\Repository $instance */ + return $instance->macroCall($method, $parameters); + } + /** + * Remove all items from the cache. + * + * @return bool + * @static + */ + public static function flush() + { + /** @var \Illuminate\Cache\FileStore $instance */ + return $instance->flush(); + } + /** + * Get the Filesystem instance. + * + * @return \Illuminate\Filesystem\Filesystem + * @static + */ + public static function getFilesystem() + { + /** @var \Illuminate\Cache\FileStore $instance */ + return $instance->getFilesystem(); + } + /** + * Get the working directory of the cache. + * + * @return string + * @static + */ + public static function getDirectory() + { + /** @var \Illuminate\Cache\FileStore $instance */ + return $instance->getDirectory(); + } + /** + * Get the cache key prefix. + * + * @return string + * @static + */ + public static function getPrefix() + { + /** @var \Illuminate\Cache\FileStore $instance */ + return $instance->getPrefix(); + } + + } + /** + * + * + * @see \Illuminate\Config\Repository + */ + class Config { + /** + * Determine if the given configuration value exists. + * + * @param string $key + * @return bool + * @static + */ + public static function has($key) + { + /** @var \Illuminate\Config\Repository $instance */ + return $instance->has($key); + } + /** + * Get the specified configuration value. + * + * @param array|string $key + * @param mixed $default + * @return mixed + * @static + */ + public static function get($key, $default = null) + { + /** @var \Illuminate\Config\Repository $instance */ + return $instance->get($key, $default); + } + /** + * Get many configuration values. + * + * @param array $keys + * @return array + * @static + */ + public static function getMany($keys) + { + /** @var \Illuminate\Config\Repository $instance */ + return $instance->getMany($keys); + } + /** + * Set a given configuration value. + * + * @param array|string $key + * @param mixed $value + * @return void + * @static + */ + public static function set($key, $value = null) + { + /** @var \Illuminate\Config\Repository $instance */ + $instance->set($key, $value); + } + /** + * Prepend a value onto an array configuration value. + * + * @param string $key + * @param mixed $value + * @return void + * @static + */ + public static function prepend($key, $value) + { + /** @var \Illuminate\Config\Repository $instance */ + $instance->prepend($key, $value); + } + /** + * Push a value onto an array configuration value. + * + * @param string $key + * @param mixed $value + * @return void + * @static + */ + public static function push($key, $value) + { + /** @var \Illuminate\Config\Repository $instance */ + $instance->push($key, $value); + } + /** + * Get all of the configuration items for the application. + * + * @return array + * @static + */ + public static function all() + { + /** @var \Illuminate\Config\Repository $instance */ + return $instance->all(); + } + /** + * Determine if the given configuration option exists. + * + * @param string $key + * @return bool + * @static + */ + public static function offsetExists($key) + { + /** @var \Illuminate\Config\Repository $instance */ + return $instance->offsetExists($key); + } + /** + * Get a configuration option. + * + * @param string $key + * @return mixed + * @static + */ + public static function offsetGet($key) + { + /** @var \Illuminate\Config\Repository $instance */ + return $instance->offsetGet($key); + } + /** + * Set a configuration option. + * + * @param string $key + * @param mixed $value + * @return void + * @static + */ + public static function offsetSet($key, $value) + { + /** @var \Illuminate\Config\Repository $instance */ + $instance->offsetSet($key, $value); + } + /** + * Unset a configuration option. + * + * @param string $key + * @return void + * @static + */ + public static function offsetUnset($key) + { + /** @var \Illuminate\Config\Repository $instance */ + $instance->offsetUnset($key); + } + + } + /** + * + * + * @see \Illuminate\Cookie\CookieJar + */ + class Cookie { + /** + * Create a new cookie instance. + * + * @param string $name + * @param string $value + * @param int $minutes + * @param string|null $path + * @param string|null $domain + * @param bool|null $secure + * @param bool $httpOnly + * @param bool $raw + * @param string|null $sameSite + * @return \Symfony\Component\HttpFoundation\Cookie + * @static + */ + public static function make($name, $value, $minutes = 0, $path = null, $domain = null, $secure = null, $httpOnly = true, $raw = false, $sameSite = null) + { + /** @var \Illuminate\Cookie\CookieJar $instance */ + return $instance->make($name, $value, $minutes, $path, $domain, $secure, $httpOnly, $raw, $sameSite); + } + /** + * Create a cookie that lasts "forever" (five years). + * + * @param string $name + * @param string $value + * @param string|null $path + * @param string|null $domain + * @param bool|null $secure + * @param bool $httpOnly + * @param bool $raw + * @param string|null $sameSite + * @return \Symfony\Component\HttpFoundation\Cookie + * @static + */ + public static function forever($name, $value, $path = null, $domain = null, $secure = null, $httpOnly = true, $raw = false, $sameSite = null) + { + /** @var \Illuminate\Cookie\CookieJar $instance */ + return $instance->forever($name, $value, $path, $domain, $secure, $httpOnly, $raw, $sameSite); + } + /** + * Expire the given cookie. + * + * @param string $name + * @param string|null $path + * @param string|null $domain + * @return \Symfony\Component\HttpFoundation\Cookie + * @static + */ + public static function forget($name, $path = null, $domain = null) + { + /** @var \Illuminate\Cookie\CookieJar $instance */ + return $instance->forget($name, $path, $domain); + } + /** + * Determine if a cookie has been queued. + * + * @param string $key + * @param string|null $path + * @return bool + * @static + */ + public static function hasQueued($key, $path = null) + { + /** @var \Illuminate\Cookie\CookieJar $instance */ + return $instance->hasQueued($key, $path); + } + /** + * Get a queued cookie instance. + * + * @param string $key + * @param mixed $default + * @param string|null $path + * @return \Symfony\Component\HttpFoundation\Cookie|null + * @static + */ + public static function queued($key, $default = null, $path = null) + { + /** @var \Illuminate\Cookie\CookieJar $instance */ + return $instance->queued($key, $default, $path); + } + /** + * Queue a cookie to send with the next response. + * + * @param array $parameters + * @return void + * @static + */ + public static function queue(...$parameters) + { + /** @var \Illuminate\Cookie\CookieJar $instance */ + $instance->queue(...$parameters); + } + /** + * Remove a cookie from the queue. + * + * @param string $name + * @param string|null $path + * @return void + * @static + */ + public static function unqueue($name, $path = null) + { + /** @var \Illuminate\Cookie\CookieJar $instance */ + $instance->unqueue($name, $path); + } + /** + * Set the default path and domain for the jar. + * + * @param string $path + * @param string $domain + * @param bool $secure + * @param string|null $sameSite + * @return \Illuminate\Cookie\CookieJar + * @static + */ + public static function setDefaultPathAndDomain($path, $domain, $secure = false, $sameSite = null) + { + /** @var \Illuminate\Cookie\CookieJar $instance */ + return $instance->setDefaultPathAndDomain($path, $domain, $secure, $sameSite); + } + /** + * Get the cookies which have been queued for the next request. + * + * @return \Symfony\Component\HttpFoundation\Cookie[] + * @static + */ + public static function getQueuedCookies() + { + /** @var \Illuminate\Cookie\CookieJar $instance */ + return $instance->getQueuedCookies(); + } + /** + * Register a custom macro. + * + * @param string $name + * @param object|callable $macro + * @return void + * @static + */ + public static function macro($name, $macro) + { + \Illuminate\Cookie\CookieJar::macro($name, $macro); + } + /** + * Mix another object into the class. + * + * @param object $mixin + * @param bool $replace + * @return void + * @throws \ReflectionException + * @static + */ + public static function mixin($mixin, $replace = true) + { + \Illuminate\Cookie\CookieJar::mixin($mixin, $replace); + } + /** + * Checks if macro is registered. + * + * @param string $name + * @return bool + * @static + */ + public static function hasMacro($name) + { + return \Illuminate\Cookie\CookieJar::hasMacro($name); + } + + } + /** + * + * + * @see \Illuminate\Encryption\Encrypter + */ + class Crypt { + /** + * Determine if the given key and cipher combination is valid. + * + * @param string $key + * @param string $cipher + * @return bool + * @static + */ + public static function supported($key, $cipher) + { + return \Illuminate\Encryption\Encrypter::supported($key, $cipher); + } + /** + * Create a new encryption key for the given cipher. + * + * @param string $cipher + * @return string + * @static + */ + public static function generateKey($cipher) + { + return \Illuminate\Encryption\Encrypter::generateKey($cipher); + } + /** + * Encrypt the given value. + * + * @param mixed $value + * @param bool $serialize + * @return string + * @throws \Illuminate\Contracts\Encryption\EncryptException + * @static + */ + public static function encrypt($value, $serialize = true) + { + /** @var \Illuminate\Encryption\Encrypter $instance */ + return $instance->encrypt($value, $serialize); + } + /** + * Encrypt a string without serialization. + * + * @param string $value + * @return string + * @throws \Illuminate\Contracts\Encryption\EncryptException + * @static + */ + public static function encryptString($value) + { + /** @var \Illuminate\Encryption\Encrypter $instance */ + return $instance->encryptString($value); + } + /** + * Decrypt the given value. + * + * @param string $payload + * @param bool $unserialize + * @return mixed + * @throws \Illuminate\Contracts\Encryption\DecryptException + * @static + */ + public static function decrypt($payload, $unserialize = true) + { + /** @var \Illuminate\Encryption\Encrypter $instance */ + return $instance->decrypt($payload, $unserialize); + } + /** + * Decrypt the given string without unserialization. + * + * @param string $payload + * @return string + * @throws \Illuminate\Contracts\Encryption\DecryptException + * @static + */ + public static function decryptString($payload) + { + /** @var \Illuminate\Encryption\Encrypter $instance */ + return $instance->decryptString($payload); + } + /** + * Get the encryption key. + * + * @return string + * @static + */ + public static function getKey() + { + /** @var \Illuminate\Encryption\Encrypter $instance */ + return $instance->getKey(); + } + + } + /** + * + * + * @see \Illuminate\Database\DatabaseManager + * @see \Illuminate\Database\Connection + */ + class DB { + /** + * Get a database connection instance. + * + * @param string|null $name + * @return \Illuminate\Database\Connection + * @static + */ + public static function connection($name = null) + { + /** @var \Illuminate\Database\DatabaseManager $instance */ + return $instance->connection($name); + } + /** + * Disconnect from the given database and remove from local cache. + * + * @param string|null $name + * @return void + * @static + */ + public static function purge($name = null) + { + /** @var \Illuminate\Database\DatabaseManager $instance */ + $instance->purge($name); + } + /** + * Disconnect from the given database. + * + * @param string|null $name + * @return void + * @static + */ + public static function disconnect($name = null) + { + /** @var \Illuminate\Database\DatabaseManager $instance */ + $instance->disconnect($name); + } + /** + * Reconnect to the given database. + * + * @param string|null $name + * @return \Illuminate\Database\Connection + * @static + */ + public static function reconnect($name = null) + { + /** @var \Illuminate\Database\DatabaseManager $instance */ + return $instance->reconnect($name); + } + /** + * Set the default database connection for the callback execution. + * + * @param string $name + * @param callable $callback + * @return mixed + * @static + */ + public static function usingConnection($name, $callback) + { + /** @var \Illuminate\Database\DatabaseManager $instance */ + return $instance->usingConnection($name, $callback); + } + /** + * Get the default connection name. + * + * @return string + * @static + */ + public static function getDefaultConnection() + { + /** @var \Illuminate\Database\DatabaseManager $instance */ + return $instance->getDefaultConnection(); + } + /** + * Set the default connection name. + * + * @param string $name + * @return void + * @static + */ + public static function setDefaultConnection($name) + { + /** @var \Illuminate\Database\DatabaseManager $instance */ + $instance->setDefaultConnection($name); + } + /** + * Get all of the support drivers. + * + * @return array + * @static + */ + public static function supportedDrivers() + { + /** @var \Illuminate\Database\DatabaseManager $instance */ + return $instance->supportedDrivers(); + } + /** + * Get all of the drivers that are actually available. + * + * @return array + * @static + */ + public static function availableDrivers() + { + /** @var \Illuminate\Database\DatabaseManager $instance */ + return $instance->availableDrivers(); + } + /** + * Register an extension connection resolver. + * + * @param string $name + * @param callable $resolver + * @return void + * @static + */ + public static function extend($name, $resolver) + { + /** @var \Illuminate\Database\DatabaseManager $instance */ + $instance->extend($name, $resolver); + } + /** + * Return all of the created connections. + * + * @return array + * @static + */ + public static function getConnections() + { + /** @var \Illuminate\Database\DatabaseManager $instance */ + return $instance->getConnections(); + } + /** + * Set the database reconnector callback. + * + * @param callable $reconnector + * @return void + * @static + */ + public static function setReconnector($reconnector) + { + /** @var \Illuminate\Database\DatabaseManager $instance */ + $instance->setReconnector($reconnector); + } + /** + * Get a schema builder instance for the connection. + * + * @return \Illuminate\Database\Schema\MySqlBuilder + * @static + */ + public static function getSchemaBuilder() + { + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->getSchemaBuilder(); + } + /** + * Set the query grammar to the default implementation. + * + * @return void + * @static + */ + public static function useDefaultQueryGrammar() + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + $instance->useDefaultQueryGrammar(); + } + /** + * Set the schema grammar to the default implementation. + * + * @return void + * @static + */ + public static function useDefaultSchemaGrammar() + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + $instance->useDefaultSchemaGrammar(); + } + /** + * Set the query post processor to the default implementation. + * + * @return void + * @static + */ + public static function useDefaultPostProcessor() + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + $instance->useDefaultPostProcessor(); + } + /** + * Begin a fluent query against a database table. + * + * @param \Closure|\Illuminate\Database\Query\Builder|string $table + * @param string|null $as + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function table($table, $as = null) + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->table($table, $as); + } + /** + * Get a new query builder instance. + * + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function query() + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->query(); + } + /** + * Run a select statement and return a single result. + * + * @param string $query + * @param array $bindings + * @param bool $useReadPdo + * @return mixed + * @static + */ + public static function selectOne($query, $bindings = [], $useReadPdo = true) + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->selectOne($query, $bindings, $useReadPdo); + } + /** + * Run a select statement against the database. + * + * @param string $query + * @param array $bindings + * @return array + * @static + */ + public static function selectFromWriteConnection($query, $bindings = []) + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->selectFromWriteConnection($query, $bindings); + } + /** + * Run a select statement against the database. + * + * @param string $query + * @param array $bindings + * @param bool $useReadPdo + * @return array + * @static + */ + public static function select($query, $bindings = [], $useReadPdo = true) + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->select($query, $bindings, $useReadPdo); + } + /** + * Run a select statement against the database and returns a generator. + * + * @param string $query + * @param array $bindings + * @param bool $useReadPdo + * @return \Generator + * @static + */ + public static function cursor($query, $bindings = [], $useReadPdo = true) + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->cursor($query, $bindings, $useReadPdo); + } + /** + * Run an insert statement against the database. + * + * @param string $query + * @param array $bindings + * @return bool + * @static + */ + public static function insert($query, $bindings = []) + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->insert($query, $bindings); + } + /** + * Run an update statement against the database. + * + * @param string $query + * @param array $bindings + * @return int + * @static + */ + public static function update($query, $bindings = []) + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->update($query, $bindings); + } + /** + * Run a delete statement against the database. + * + * @param string $query + * @param array $bindings + * @return int + * @static + */ + public static function delete($query, $bindings = []) + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->delete($query, $bindings); + } + /** + * Execute an SQL statement and return the boolean result. + * + * @param string $query + * @param array $bindings + * @return bool + * @static + */ + public static function statement($query, $bindings = []) + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->statement($query, $bindings); + } + /** + * Run an SQL statement and get the number of rows affected. + * + * @param string $query + * @param array $bindings + * @return int + * @static + */ + public static function affectingStatement($query, $bindings = []) + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->affectingStatement($query, $bindings); + } + /** + * Run a raw, unprepared query against the PDO connection. + * + * @param string $query + * @return bool + * @static + */ + public static function unprepared($query) + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->unprepared($query); + } + /** + * Execute the given callback in "dry run" mode. + * + * @param \Closure $callback + * @return array + * @static + */ + public static function pretend($callback) + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->pretend($callback); + } + /** + * Bind values to their parameters in the given statement. + * + * @param \PDOStatement $statement + * @param array $bindings + * @return void + * @static + */ + public static function bindValues($statement, $bindings) + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + $instance->bindValues($statement, $bindings); + } + /** + * Prepare the query bindings for execution. + * + * @param array $bindings + * @return array + * @static + */ + public static function prepareBindings($bindings) + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->prepareBindings($bindings); + } + /** + * Log a query in the connection's query log. + * + * @param string $query + * @param array $bindings + * @param float|null $time + * @return void + * @static + */ + public static function logQuery($query, $bindings, $time = null) + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + $instance->logQuery($query, $bindings, $time); + } + /** + * Register a database query listener with the connection. + * + * @param \Closure $callback + * @return void + * @static + */ + public static function listen($callback) + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + $instance->listen($callback); + } + /** + * Get a new raw query expression. + * + * @param mixed $value + * @return \Illuminate\Database\Query\Expression + * @static + */ + public static function raw($value) + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->raw($value); + } + /** + * Indicate if any records have been modified. + * + * @param bool $value + * @return void + * @static + */ + public static function recordsHaveBeenModified($value = true) + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + $instance->recordsHaveBeenModified($value); + } + /** + * Is Doctrine available? + * + * @return bool + * @static + */ + public static function isDoctrineAvailable() + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->isDoctrineAvailable(); + } + /** + * Get a Doctrine Schema Column instance. + * + * @param string $table + * @param string $column + * @return \Doctrine\DBAL\Schema\Column + * @static + */ + public static function getDoctrineColumn($table, $column) + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->getDoctrineColumn($table, $column); + } + /** + * Get the Doctrine DBAL schema manager for the connection. + * + * @return \Doctrine\DBAL\Schema\AbstractSchemaManager + * @static + */ + public static function getDoctrineSchemaManager() + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->getDoctrineSchemaManager(); + } + /** + * Get the Doctrine DBAL database connection instance. + * + * @return \Doctrine\DBAL\Connection + * @static + */ + public static function getDoctrineConnection() + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->getDoctrineConnection(); + } + /** + * Get the current PDO connection. + * + * @return \PDO + * @static + */ + public static function getPdo() + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->getPdo(); + } + /** + * Get the current PDO connection parameter without executing any reconnect logic. + * + * @return \PDO|\Closure|null + * @static + */ + public static function getRawPdo() + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->getRawPdo(); + } + /** + * Get the current PDO connection used for reading. + * + * @return \PDO + * @static + */ + public static function getReadPdo() + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->getReadPdo(); + } + /** + * Get the current read PDO connection parameter without executing any reconnect logic. + * + * @return \PDO|\Closure|null + * @static + */ + public static function getRawReadPdo() + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->getRawReadPdo(); + } + /** + * Set the PDO connection. + * + * @param \PDO|\Closure|null $pdo + * @return \Illuminate\Database\MySqlConnection + * @static + */ + public static function setPdo($pdo) + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->setPdo($pdo); + } + /** + * Set the PDO connection used for reading. + * + * @param \PDO|\Closure|null $pdo + * @return \Illuminate\Database\MySqlConnection + * @static + */ + public static function setReadPdo($pdo) + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->setReadPdo($pdo); + } + /** + * Get the database connection name. + * + * @return string|null + * @static + */ + public static function getName() + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->getName(); + } + /** + * Get an option from the configuration options. + * + * @param string|null $option + * @return mixed + * @static + */ + public static function getConfig($option = null) + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->getConfig($option); + } + /** + * Get the PDO driver name. + * + * @return string + * @static + */ + public static function getDriverName() + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->getDriverName(); + } + /** + * Get the query grammar used by the connection. + * + * @return \Illuminate\Database\Query\Grammars\Grammar + * @static + */ + public static function getQueryGrammar() + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->getQueryGrammar(); + } + /** + * Set the query grammar used by the connection. + * + * @param \Illuminate\Database\Query\Grammars\Grammar $grammar + * @return \Illuminate\Database\MySqlConnection + * @static + */ + public static function setQueryGrammar($grammar) + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->setQueryGrammar($grammar); + } + /** + * Get the schema grammar used by the connection. + * + * @return \Illuminate\Database\Schema\Grammars\Grammar + * @static + */ + public static function getSchemaGrammar() + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->getSchemaGrammar(); + } + /** + * Set the schema grammar used by the connection. + * + * @param \Illuminate\Database\Schema\Grammars\Grammar $grammar + * @return \Illuminate\Database\MySqlConnection + * @static + */ + public static function setSchemaGrammar($grammar) + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->setSchemaGrammar($grammar); + } + /** + * Get the query post processor used by the connection. + * + * @return \Illuminate\Database\Query\Processors\Processor + * @static + */ + public static function getPostProcessor() + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->getPostProcessor(); + } + /** + * Set the query post processor used by the connection. + * + * @param \Illuminate\Database\Query\Processors\Processor $processor + * @return \Illuminate\Database\MySqlConnection + * @static + */ + public static function setPostProcessor($processor) + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->setPostProcessor($processor); + } + /** + * Get the event dispatcher used by the connection. + * + * @return \Illuminate\Contracts\Events\Dispatcher + * @static + */ + public static function getEventDispatcher() + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->getEventDispatcher(); + } + /** + * Set the event dispatcher instance on the connection. + * + * @param \Illuminate\Contracts\Events\Dispatcher $events + * @return \Illuminate\Database\MySqlConnection + * @static + */ + public static function setEventDispatcher($events) + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->setEventDispatcher($events); + } + /** + * Unset the event dispatcher for this connection. + * + * @return void + * @static + */ + public static function unsetEventDispatcher() + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + $instance->unsetEventDispatcher(); + } + /** + * Determine if the connection is in a "dry run". + * + * @return bool + * @static + */ + public static function pretending() + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->pretending(); + } + /** + * Get the connection query log. + * + * @return array + * @static + */ + public static function getQueryLog() + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->getQueryLog(); + } + /** + * Clear the query log. + * + * @return void + * @static + */ + public static function flushQueryLog() + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + $instance->flushQueryLog(); + } + /** + * Enable the query log on the connection. + * + * @return void + * @static + */ + public static function enableQueryLog() + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + $instance->enableQueryLog(); + } + /** + * Disable the query log on the connection. + * + * @return void + * @static + */ + public static function disableQueryLog() + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + $instance->disableQueryLog(); + } + /** + * Determine whether we're logging queries. + * + * @return bool + * @static + */ + public static function logging() + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->logging(); + } + /** + * Get the name of the connected database. + * + * @return string + * @static + */ + public static function getDatabaseName() + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->getDatabaseName(); + } + /** + * Set the name of the connected database. + * + * @param string $database + * @return \Illuminate\Database\MySqlConnection + * @static + */ + public static function setDatabaseName($database) + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->setDatabaseName($database); + } + /** + * Get the table prefix for the connection. + * + * @return string + * @static + */ + public static function getTablePrefix() + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->getTablePrefix(); + } + /** + * Set the table prefix in use by the connection. + * + * @param string $prefix + * @return \Illuminate\Database\MySqlConnection + * @static + */ + public static function setTablePrefix($prefix) + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->setTablePrefix($prefix); + } + /** + * Set the table prefix and return the grammar. + * + * @param \Illuminate\Database\Grammar $grammar + * @return \Illuminate\Database\Grammar + * @static + */ + public static function withTablePrefix($grammar) + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->withTablePrefix($grammar); + } + /** + * Register a connection resolver. + * + * @param string $driver + * @param \Closure $callback + * @return void + * @static + */ + public static function resolverFor($driver, $callback) + { //Method inherited from \Illuminate\Database\Connection + \Illuminate\Database\MySqlConnection::resolverFor($driver, $callback); + } + /** + * Get the connection resolver for the given driver. + * + * @param string $driver + * @return mixed + * @static + */ + public static function getResolver($driver) + { //Method inherited from \Illuminate\Database\Connection + return \Illuminate\Database\MySqlConnection::getResolver($driver); + } + /** + * Execute a Closure within a transaction. + * + * @param \Closure $callback + * @param int $attempts + * @return mixed + * @throws \Throwable + * @static + */ + public static function transaction($callback, $attempts = 1) + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->transaction($callback, $attempts); + } + /** + * Start a new database transaction. + * + * @return void + * @throws \Throwable + * @static + */ + public static function beginTransaction() + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + $instance->beginTransaction(); + } + /** + * Commit the active database transaction. + * + * @return void + * @throws \Throwable + * @static + */ + public static function commit() + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + $instance->commit(); + } + /** + * Rollback the active database transaction. + * + * @param int|null $toLevel + * @return void + * @throws \Throwable + * @static + */ + public static function rollBack($toLevel = null) + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + $instance->rollBack($toLevel); + } + /** + * Get the number of active transactions. + * + * @return int + * @static + */ + public static function transactionLevel() + { //Method inherited from \Illuminate\Database\Connection + /** @var \Illuminate\Database\MySqlConnection $instance */ + return $instance->transactionLevel(); + } + + } + /** + * + * + * @see \Illuminate\Events\Dispatcher + */ + class Event { + /** + * Register an event listener with the dispatcher. + * + * @param string|array $events + * @param \Closure|string $listener + * @return void + * @static + */ + public static function listen($events, $listener) + { + /** @var \Illuminate\Events\Dispatcher $instance */ + $instance->listen($events, $listener); + } + /** + * Determine if a given event has listeners. + * + * @param string $eventName + * @return bool + * @static + */ + public static function hasListeners($eventName) + { + /** @var \Illuminate\Events\Dispatcher $instance */ + return $instance->hasListeners($eventName); + } + /** + * Determine if the given event has any wildcard listeners. + * + * @param string $eventName + * @return bool + * @static + */ + public static function hasWildcardListeners($eventName) + { + /** @var \Illuminate\Events\Dispatcher $instance */ + return $instance->hasWildcardListeners($eventName); + } + /** + * Register an event and payload to be fired later. + * + * @param string $event + * @param array $payload + * @return void + * @static + */ + public static function push($event, $payload = []) + { + /** @var \Illuminate\Events\Dispatcher $instance */ + $instance->push($event, $payload); + } + /** + * Flush a set of pushed events. + * + * @param string $event + * @return void + * @static + */ + public static function flush($event) + { + /** @var \Illuminate\Events\Dispatcher $instance */ + $instance->flush($event); + } + /** + * Register an event subscriber with the dispatcher. + * + * @param object|string $subscriber + * @return void + * @static + */ + public static function subscribe($subscriber) + { + /** @var \Illuminate\Events\Dispatcher $instance */ + $instance->subscribe($subscriber); + } + /** + * Fire an event until the first non-null response is returned. + * + * @param string|object $event + * @param mixed $payload + * @return array|null + * @static + */ + public static function until($event, $payload = []) + { + /** @var \Illuminate\Events\Dispatcher $instance */ + return $instance->until($event, $payload); + } + /** + * Fire an event and call the listeners. + * + * @param string|object $event + * @param mixed $payload + * @param bool $halt + * @return array|null + * @static + */ + public static function dispatch($event, $payload = [], $halt = false) + { + /** @var \Illuminate\Events\Dispatcher $instance */ + return $instance->dispatch($event, $payload, $halt); + } + /** + * Get all of the listeners for a given event name. + * + * @param string $eventName + * @return array + * @static + */ + public static function getListeners($eventName) + { + /** @var \Illuminate\Events\Dispatcher $instance */ + return $instance->getListeners($eventName); + } + /** + * Register an event listener with the dispatcher. + * + * @param \Closure|string $listener + * @param bool $wildcard + * @return \Closure + * @static + */ + public static function makeListener($listener, $wildcard = false) + { + /** @var \Illuminate\Events\Dispatcher $instance */ + return $instance->makeListener($listener, $wildcard); + } + /** + * Create a class based listener using the IoC container. + * + * @param string $listener + * @param bool $wildcard + * @return \Closure + * @static + */ + public static function createClassListener($listener, $wildcard = false) + { + /** @var \Illuminate\Events\Dispatcher $instance */ + return $instance->createClassListener($listener, $wildcard); + } + /** + * Remove a set of listeners from the dispatcher. + * + * @param string $event + * @return void + * @static + */ + public static function forget($event) + { + /** @var \Illuminate\Events\Dispatcher $instance */ + $instance->forget($event); + } + /** + * Forget all of the pushed listeners. + * + * @return void + * @static + */ + public static function forgetPushed() + { + /** @var \Illuminate\Events\Dispatcher $instance */ + $instance->forgetPushed(); + } + /** + * Set the queue resolver implementation. + * + * @param callable $resolver + * @return \Illuminate\Events\Dispatcher + * @static + */ + public static function setQueueResolver($resolver) + { + /** @var \Illuminate\Events\Dispatcher $instance */ + return $instance->setQueueResolver($resolver); + } + /** + * Register a custom macro. + * + * @param string $name + * @param object|callable $macro + * @return void + * @static + */ + public static function macro($name, $macro) + { + \Illuminate\Events\Dispatcher::macro($name, $macro); + } + /** + * Mix another object into the class. + * + * @param object $mixin + * @param bool $replace + * @return void + * @throws \ReflectionException + * @static + */ + public static function mixin($mixin, $replace = true) + { + \Illuminate\Events\Dispatcher::mixin($mixin, $replace); + } + /** + * Checks if macro is registered. + * + * @param string $name + * @return bool + * @static + */ + public static function hasMacro($name) + { + return \Illuminate\Events\Dispatcher::hasMacro($name); + } + /** + * Assert if an event was dispatched based on a truth-test callback. + * + * @param string|\Closure $event + * @param callable|int|null $callback + * @return void + * @static + */ + public static function assertDispatched($event, $callback = null) + { + /** @var \Illuminate\Support\Testing\Fakes\EventFake $instance */ + $instance->assertDispatched($event, $callback); + } + /** + * Assert if an event was dispatched a number of times. + * + * @param string $event + * @param int $times + * @return void + * @static + */ + public static function assertDispatchedTimes($event, $times = 1) + { + /** @var \Illuminate\Support\Testing\Fakes\EventFake $instance */ + $instance->assertDispatchedTimes($event, $times); + } + /** + * Determine if an event was dispatched based on a truth-test callback. + * + * @param string|\Closure $event + * @param callable|null $callback + * @return void + * @static + */ + public static function assertNotDispatched($event, $callback = null) + { + /** @var \Illuminate\Support\Testing\Fakes\EventFake $instance */ + $instance->assertNotDispatched($event, $callback); + } + /** + * Get all of the events matching a truth-test callback. + * + * @param string $event + * @param callable|null $callback + * @return \Illuminate\Support\Collection + * @static + */ + public static function dispatched($event, $callback = null) + { + /** @var \Illuminate\Support\Testing\Fakes\EventFake $instance */ + return $instance->dispatched($event, $callback); + } + /** + * Determine if the given event has been dispatched. + * + * @param string $event + * @return bool + * @static + */ + public static function hasDispatched($event) + { + /** @var \Illuminate\Support\Testing\Fakes\EventFake $instance */ + return $instance->hasDispatched($event); + } + + } + /** + * + * + * @see \Illuminate\Filesystem\Filesystem + */ + class File { + /** + * Determine if a file or directory exists. + * + * @param string $path + * @return bool + * @static + */ + public static function exists($path) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->exists($path); + } + /** + * Determine if a file or directory is missing. + * + * @param string $path + * @return bool + * @static + */ + public static function missing($path) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->missing($path); + } + /** + * Get the contents of a file. + * + * @param string $path + * @param bool $lock + * @return string + * @throws \Illuminate\Contracts\Filesystem\FileNotFoundException + * @static + */ + public static function get($path, $lock = false) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->get($path, $lock); + } + /** + * Get contents of a file with shared access. + * + * @param string $path + * @return string + * @static + */ + public static function sharedGet($path) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->sharedGet($path); + } + /** + * Get the returned value of a file. + * + * @param string $path + * @return mixed + * @throws \Illuminate\Contracts\Filesystem\FileNotFoundException + * @static + */ + public static function getRequire($path) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->getRequire($path); + } + /** + * Require the given file once. + * + * @param string $file + * @return mixed + * @static + */ + public static function requireOnce($file) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->requireOnce($file); + } + /** + * Get the MD5 hash of the file at the given path. + * + * @param string $path + * @return string + * @static + */ + public static function hash($path) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->hash($path); + } + /** + * Write the contents of a file. + * + * @param string $path + * @param string $contents + * @param bool $lock + * @return int|bool + * @static + */ + public static function put($path, $contents, $lock = false) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->put($path, $contents, $lock); + } + /** + * Write the contents of a file, replacing it atomically if it already exists. + * + * @param string $path + * @param string $content + * @return void + * @static + */ + public static function replace($path, $content) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + $instance->replace($path, $content); + } + /** + * Prepend to a file. + * + * @param string $path + * @param string $data + * @return int + * @static + */ + public static function prepend($path, $data) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->prepend($path, $data); + } + /** + * Append to a file. + * + * @param string $path + * @param string $data + * @return int + * @static + */ + public static function append($path, $data) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->append($path, $data); + } + /** + * Get or set UNIX mode of a file or directory. + * + * @param string $path + * @param int|null $mode + * @return mixed + * @static + */ + public static function chmod($path, $mode = null) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->chmod($path, $mode); + } + /** + * Delete the file at a given path. + * + * @param string|array $paths + * @return bool + * @static + */ + public static function delete($paths) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->delete($paths); + } + /** + * Move a file to a new location. + * + * @param string $path + * @param string $target + * @return bool + * @static + */ + public static function move($path, $target) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->move($path, $target); + } + /** + * Copy a file to a new location. + * + * @param string $path + * @param string $target + * @return bool + * @static + */ + public static function copy($path, $target) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->copy($path, $target); + } + /** + * Create a symlink to the target file or directory. On Windows, a hard link is created if the target is a file. + * + * @param string $target + * @param string $link + * @return void + * @static + */ + public static function link($target, $link) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + $instance->link($target, $link); + } + /** + * Extract the file name from a file path. + * + * @param string $path + * @return string + * @static + */ + public static function name($path) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->name($path); + } + /** + * Extract the trailing name component from a file path. + * + * @param string $path + * @return string + * @static + */ + public static function basename($path) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->basename($path); + } + /** + * Extract the parent directory from a file path. + * + * @param string $path + * @return string + * @static + */ + public static function dirname($path) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->dirname($path); + } + /** + * Extract the file extension from a file path. + * + * @param string $path + * @return string + * @static + */ + public static function extension($path) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->extension($path); + } + /** + * Guess the file extension from the mime-type of a given file. + * + * @param string $path + * @return string|null + * @static + */ + public static function guessExtension($path) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->guessExtension($path); + } + /** + * Get the file type of a given file. + * + * @param string $path + * @return string + * @static + */ + public static function type($path) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->type($path); + } + /** + * Get the mime-type of a given file. + * + * @param string $path + * @return string|false + * @static + */ + public static function mimeType($path) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->mimeType($path); + } + /** + * Get the file size of a given file. + * + * @param string $path + * @return int + * @static + */ + public static function size($path) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->size($path); + } + /** + * Get the file's last modification time. + * + * @param string $path + * @return int + * @static + */ + public static function lastModified($path) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->lastModified($path); + } + /** + * Determine if the given path is a directory. + * + * @param string $directory + * @return bool + * @static + */ + public static function isDirectory($directory) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->isDirectory($directory); + } + /** + * Determine if the given path is readable. + * + * @param string $path + * @return bool + * @static + */ + public static function isReadable($path) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->isReadable($path); + } + /** + * Determine if the given path is writable. + * + * @param string $path + * @return bool + * @static + */ + public static function isWritable($path) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->isWritable($path); + } + /** + * Determine if the given path is a file. + * + * @param string $file + * @return bool + * @static + */ + public static function isFile($file) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->isFile($file); + } + /** + * Find path names matching a given pattern. + * + * @param string $pattern + * @param int $flags + * @return array + * @static + */ + public static function glob($pattern, $flags = 0) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->glob($pattern, $flags); + } + /** + * Get an array of all files in a directory. + * + * @param string $directory + * @param bool $hidden + * @return \Symfony\Component\Finder\SplFileInfo[] + * @static + */ + public static function files($directory, $hidden = false) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->files($directory, $hidden); + } + /** + * Get all of the files from the given directory (recursive). + * + * @param string $directory + * @param bool $hidden + * @return \Symfony\Component\Finder\SplFileInfo[] + * @static + */ + public static function allFiles($directory, $hidden = false) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->allFiles($directory, $hidden); + } + /** + * Get all of the directories within a given directory. + * + * @param string $directory + * @return array + * @static + */ + public static function directories($directory) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->directories($directory); + } + /** + * Ensure a directory exists. + * + * @param string $path + * @param int $mode + * @param bool $recursive + * @return void + * @static + */ + public static function ensureDirectoryExists($path, $mode = 493, $recursive = true) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + $instance->ensureDirectoryExists($path, $mode, $recursive); + } + /** + * Create a directory. + * + * @param string $path + * @param int $mode + * @param bool $recursive + * @param bool $force + * @return bool + * @static + */ + public static function makeDirectory($path, $mode = 493, $recursive = false, $force = false) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->makeDirectory($path, $mode, $recursive, $force); + } + /** + * Move a directory. + * + * @param string $from + * @param string $to + * @param bool $overwrite + * @return bool + * @static + */ + public static function moveDirectory($from, $to, $overwrite = false) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->moveDirectory($from, $to, $overwrite); + } + /** + * Copy a directory from one location to another. + * + * @param string $directory + * @param string $destination + * @param int|null $options + * @return bool + * @static + */ + public static function copyDirectory($directory, $destination, $options = null) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->copyDirectory($directory, $destination, $options); + } + /** + * Recursively delete a directory. + * + * The directory itself may be optionally preserved. + * + * @param string $directory + * @param bool $preserve + * @return bool + * @static + */ + public static function deleteDirectory($directory, $preserve = false) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->deleteDirectory($directory, $preserve); + } + /** + * Remove all of the directories within a given directory. + * + * @param string $directory + * @return bool + * @static + */ + public static function deleteDirectories($directory) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->deleteDirectories($directory); + } + /** + * Empty the specified directory of all files and folders. + * + * @param string $directory + * @return bool + * @static + */ + public static function cleanDirectory($directory) + { + /** @var \Illuminate\Filesystem\Filesystem $instance */ + return $instance->cleanDirectory($directory); + } + /** + * Register a custom macro. + * + * @param string $name + * @param object|callable $macro + * @return void + * @static + */ + public static function macro($name, $macro) + { + \Illuminate\Filesystem\Filesystem::macro($name, $macro); + } + /** + * Mix another object into the class. + * + * @param object $mixin + * @param bool $replace + * @return void + * @throws \ReflectionException + * @static + */ + public static function mixin($mixin, $replace = true) + { + \Illuminate\Filesystem\Filesystem::mixin($mixin, $replace); + } + /** + * Checks if macro is registered. + * + * @param string $name + * @return bool + * @static + */ + public static function hasMacro($name) + { + return \Illuminate\Filesystem\Filesystem::hasMacro($name); + } + + } + /** + * + * + * @see \Illuminate\Contracts\Auth\Access\Gate + */ + class Gate { + /** + * Determine if a given ability has been defined. + * + * @param string|array $ability + * @return bool + * @static + */ + public static function has($ability) + { + /** @var \Illuminate\Auth\Access\Gate $instance */ + return $instance->has($ability); + } + /** + * Define a new ability. + * + * @param string $ability + * @param callable|string $callback + * @return \Illuminate\Auth\Access\Gate + * @throws \InvalidArgumentException + * @static + */ + public static function define($ability, $callback) + { + /** @var \Illuminate\Auth\Access\Gate $instance */ + return $instance->define($ability, $callback); + } + /** + * Define abilities for a resource. + * + * @param string $name + * @param string $class + * @param array|null $abilities + * @return \Illuminate\Auth\Access\Gate + * @static + */ + public static function resource($name, $class, $abilities = null) + { + /** @var \Illuminate\Auth\Access\Gate $instance */ + return $instance->resource($name, $class, $abilities); + } + /** + * Define a policy class for a given class type. + * + * @param string $class + * @param string $policy + * @return \Illuminate\Auth\Access\Gate + * @static + */ + public static function policy($class, $policy) + { + /** @var \Illuminate\Auth\Access\Gate $instance */ + return $instance->policy($class, $policy); + } + /** + * Register a callback to run before all Gate checks. + * + * @param callable $callback + * @return \Illuminate\Auth\Access\Gate + * @static + */ + public static function before($callback) + { + /** @var \Illuminate\Auth\Access\Gate $instance */ + return $instance->before($callback); + } + /** + * Register a callback to run after all Gate checks. + * + * @param callable $callback + * @return \Illuminate\Auth\Access\Gate + * @static + */ + public static function after($callback) + { + /** @var \Illuminate\Auth\Access\Gate $instance */ + return $instance->after($callback); + } + /** + * Determine if the given ability should be granted for the current user. + * + * @param string $ability + * @param array|mixed $arguments + * @return bool + * @static + */ + public static function allows($ability, $arguments = []) + { + /** @var \Illuminate\Auth\Access\Gate $instance */ + return $instance->allows($ability, $arguments); + } + /** + * Determine if the given ability should be denied for the current user. + * + * @param string $ability + * @param array|mixed $arguments + * @return bool + * @static + */ + public static function denies($ability, $arguments = []) + { + /** @var \Illuminate\Auth\Access\Gate $instance */ + return $instance->denies($ability, $arguments); + } + /** + * Determine if all of the given abilities should be granted for the current user. + * + * @param \Illuminate\Auth\Access\iterable|string $abilities + * @param array|mixed $arguments + * @return bool + * @static + */ + public static function check($abilities, $arguments = []) + { + /** @var \Illuminate\Auth\Access\Gate $instance */ + return $instance->check($abilities, $arguments); + } + /** + * Determine if any one of the given abilities should be granted for the current user. + * + * @param \Illuminate\Auth\Access\iterable|string $abilities + * @param array|mixed $arguments + * @return bool + * @static + */ + public static function any($abilities, $arguments = []) + { + /** @var \Illuminate\Auth\Access\Gate $instance */ + return $instance->any($abilities, $arguments); + } + /** + * Determine if all of the given abilities should be denied for the current user. + * + * @param \Illuminate\Auth\Access\iterable|string $abilities + * @param array|mixed $arguments + * @return bool + * @static + */ + public static function none($abilities, $arguments = []) + { + /** @var \Illuminate\Auth\Access\Gate $instance */ + return $instance->none($abilities, $arguments); + } + /** + * Determine if the given ability should be granted for the current user. + * + * @param string $ability + * @param array|mixed $arguments + * @return \Illuminate\Auth\Access\Response + * @throws \Illuminate\Auth\Access\AuthorizationException + * @static + */ + public static function authorize($ability, $arguments = []) + { + /** @var \Illuminate\Auth\Access\Gate $instance */ + return $instance->authorize($ability, $arguments); + } + /** + * Inspect the user for the given ability. + * + * @param string $ability + * @param array|mixed $arguments + * @return \Illuminate\Auth\Access\Response + * @static + */ + public static function inspect($ability, $arguments = []) + { + /** @var \Illuminate\Auth\Access\Gate $instance */ + return $instance->inspect($ability, $arguments); + } + /** + * Get the raw result from the authorization callback. + * + * @param string $ability + * @param array|mixed $arguments + * @return mixed + * @throws \Illuminate\Auth\Access\AuthorizationException + * @static + */ + public static function raw($ability, $arguments = []) + { + /** @var \Illuminate\Auth\Access\Gate $instance */ + return $instance->raw($ability, $arguments); + } + /** + * Get a policy instance for a given class. + * + * @param object|string $class + * @return mixed + * @static + */ + public static function getPolicyFor($class) + { + /** @var \Illuminate\Auth\Access\Gate $instance */ + return $instance->getPolicyFor($class); + } + /** + * Specify a callback to be used to guess policy names. + * + * @param callable $callback + * @return \Illuminate\Auth\Access\Gate + * @static + */ + public static function guessPolicyNamesUsing($callback) + { + /** @var \Illuminate\Auth\Access\Gate $instance */ + return $instance->guessPolicyNamesUsing($callback); + } + /** + * Build a policy class instance of the given type. + * + * @param object|string $class + * @return mixed + * @throws \Illuminate\Contracts\Container\BindingResolutionException + * @static + */ + public static function resolvePolicy($class) + { + /** @var \Illuminate\Auth\Access\Gate $instance */ + return $instance->resolvePolicy($class); + } + /** + * Get a gate instance for the given user. + * + * @param \Illuminate\Contracts\Auth\Authenticatable|mixed $user + * @return static + * @static + */ + public static function forUser($user) + { + /** @var \Illuminate\Auth\Access\Gate $instance */ + return $instance->forUser($user); + } + /** + * Get all of the defined abilities. + * + * @return array + * @static + */ + public static function abilities() + { + /** @var \Illuminate\Auth\Access\Gate $instance */ + return $instance->abilities(); + } + /** + * Get all of the defined policies. + * + * @return array + * @static + */ + public static function policies() + { + /** @var \Illuminate\Auth\Access\Gate $instance */ + return $instance->policies(); + } + + } + /** + * + * + * @see \Illuminate\Hashing\HashManager + */ + class Hash { + /** + * Create an instance of the Bcrypt hash Driver. + * + * @return \Illuminate\Hashing\BcryptHasher + * @static + */ + public static function createBcryptDriver() + { + /** @var \Illuminate\Hashing\HashManager $instance */ + return $instance->createBcryptDriver(); + } + /** + * Create an instance of the Argon2i hash Driver. + * + * @return \Illuminate\Hashing\ArgonHasher + * @static + */ + public static function createArgonDriver() + { + /** @var \Illuminate\Hashing\HashManager $instance */ + return $instance->createArgonDriver(); + } + /** + * Create an instance of the Argon2id hash Driver. + * + * @return \Illuminate\Hashing\Argon2IdHasher + * @static + */ + public static function createArgon2idDriver() + { + /** @var \Illuminate\Hashing\HashManager $instance */ + return $instance->createArgon2idDriver(); + } + /** + * Get information about the given hashed value. + * + * @param string $hashedValue + * @return array + * @static + */ + public static function info($hashedValue) + { + /** @var \Illuminate\Hashing\HashManager $instance */ + return $instance->info($hashedValue); + } + /** + * Hash the given value. + * + * @param string $value + * @param array $options + * @return string + * @static + */ + public static function make($value, $options = []) + { + /** @var \Illuminate\Hashing\HashManager $instance */ + return $instance->make($value, $options); + } + /** + * Check the given plain value against a hash. + * + * @param string $value + * @param string $hashedValue + * @param array $options + * @return bool + * @static + */ + public static function check($value, $hashedValue, $options = []) + { + /** @var \Illuminate\Hashing\HashManager $instance */ + return $instance->check($value, $hashedValue, $options); + } + /** + * Check if the given hash has been hashed using the given options. + * + * @param string $hashedValue + * @param array $options + * @return bool + * @static + */ + public static function needsRehash($hashedValue, $options = []) + { + /** @var \Illuminate\Hashing\HashManager $instance */ + return $instance->needsRehash($hashedValue, $options); + } + /** + * Get the default driver name. + * + * @return string + * @static + */ + public static function getDefaultDriver() + { + /** @var \Illuminate\Hashing\HashManager $instance */ + return $instance->getDefaultDriver(); + } + /** + * Get a driver instance. + * + * @param string|null $driver + * @return mixed + * @throws \InvalidArgumentException + * @static + */ + public static function driver($driver = null) + { //Method inherited from \Illuminate\Support\Manager + /** @var \Illuminate\Hashing\HashManager $instance */ + return $instance->driver($driver); + } + /** + * Register a custom driver creator Closure. + * + * @param string $driver + * @param \Closure $callback + * @return \Illuminate\Hashing\HashManager + * @static + */ + public static function extend($driver, $callback) + { //Method inherited from \Illuminate\Support\Manager + /** @var \Illuminate\Hashing\HashManager $instance */ + return $instance->extend($driver, $callback); + } + /** + * Get all of the created "drivers". + * + * @return array + * @static + */ + public static function getDrivers() + { //Method inherited from \Illuminate\Support\Manager + /** @var \Illuminate\Hashing\HashManager $instance */ + return $instance->getDrivers(); + } + + } + /** + * + * + * @method static \Illuminate\Http\Client\PendingRequest accept(string $contentType) + * @method static \Illuminate\Http\Client\PendingRequest acceptJson() + * @method static \Illuminate\Http\Client\PendingRequest asForm() + * @method static \Illuminate\Http\Client\PendingRequest asJson() + * @method static \Illuminate\Http\Client\PendingRequest asMultipart() + * @method static \Illuminate\Http\Client\PendingRequest attach(string $name, string $contents, string|null $filename = null, array $headers = []) + * @method static \Illuminate\Http\Client\PendingRequest baseUrl(string $url) + * @method static \Illuminate\Http\Client\PendingRequest beforeSending(callable $callback) + * @method static \Illuminate\Http\Client\PendingRequest bodyFormat(string $format) + * @method static \Illuminate\Http\Client\PendingRequest contentType(string $contentType) + * @method static \Illuminate\Http\Client\PendingRequest retry(int $times, int $sleep = 0) + * @method static \Illuminate\Http\Client\PendingRequest stub(callable $callback) + * @method static \Illuminate\Http\Client\PendingRequest timeout(int $seconds) + * @method static \Illuminate\Http\Client\PendingRequest withBasicAuth(string $username, string $password) + * @method static \Illuminate\Http\Client\PendingRequest withBody(resource|string $content, string $contentType) + * @method static \Illuminate\Http\Client\PendingRequest withCookies(array $cookies, string $domain) + * @method static \Illuminate\Http\Client\PendingRequest withDigestAuth(string $username, string $password) + * @method static \Illuminate\Http\Client\PendingRequest withHeaders(array $headers) + * @method static \Illuminate\Http\Client\PendingRequest withOptions(array $options) + * @method static \Illuminate\Http\Client\PendingRequest withToken(string $token, string $type = 'Bearer') + * @method static \Illuminate\Http\Client\PendingRequest withoutRedirecting() + * @method static \Illuminate\Http\Client\PendingRequest withoutVerifying() + * @method static \Illuminate\Http\Client\Response delete(string $url, array $data = []) + * @method static \Illuminate\Http\Client\Response get(string $url, array $query = []) + * @method static \Illuminate\Http\Client\Response head(string $url, array $query = []) + * @method static \Illuminate\Http\Client\Response patch(string $url, array $data = []) + * @method static \Illuminate\Http\Client\Response post(string $url, array $data = []) + * @method static \Illuminate\Http\Client\Response put(string $url, array $data = []) + * @method static \Illuminate\Http\Client\Response send(string $method, string $url, array $options = []) + * @see \Illuminate\Http\Client\Factory + */ + class Http { + /** + * Create a new response instance for use during stubbing. + * + * @param array|string $body + * @param int $status + * @param array $headers + * @return \GuzzleHttp\Promise\PromiseInterface + * @static + */ + public static function response($body = null, $status = 200, $headers = []) + { + return \Illuminate\Http\Client\Factory::response($body, $status, $headers); + } + /** + * Get an invokable object that returns a sequence of responses in order for use during stubbing. + * + * @param array $responses + * @return \Illuminate\Http\Client\ResponseSequence + * @static + */ + public static function sequence($responses = []) + { + /** @var \Illuminate\Http\Client\Factory $instance */ + return $instance->sequence($responses); + } + /** + * Register a stub callable that will intercept requests and be able to return stub responses. + * + * @param callable|array $callback + * @return \Illuminate\Http\Client\Factory + * @static + */ + public static function fake($callback = null) + { + /** @var \Illuminate\Http\Client\Factory $instance */ + return $instance->fake($callback); + } + /** + * Register a response sequence for the given URL pattern. + * + * @param string $url + * @return \Illuminate\Http\Client\ResponseSequence + * @static + */ + public static function fakeSequence($url = '*') + { + /** @var \Illuminate\Http\Client\Factory $instance */ + return $instance->fakeSequence($url); + } + /** + * Stub the given URL using the given callback. + * + * @param string $url + * @param \Illuminate\Http\Client\Response|\GuzzleHttp\Promise\PromiseInterface|callable $callback + * @return \Illuminate\Http\Client\Factory + * @static + */ + public static function stubUrl($url, $callback) + { + /** @var \Illuminate\Http\Client\Factory $instance */ + return $instance->stubUrl($url, $callback); + } + /** + * Record a request response pair. + * + * @param \Illuminate\Http\Client\Request $request + * @param \Illuminate\Http\Client\Response $response + * @return void + * @static + */ + public static function recordRequestResponsePair($request, $response) + { + /** @var \Illuminate\Http\Client\Factory $instance */ + $instance->recordRequestResponsePair($request, $response); + } + /** + * Assert that a request / response pair was recorded matching a given truth test. + * + * @param callable $callback + * @return void + * @static + */ + public static function assertSent($callback) + { + /** @var \Illuminate\Http\Client\Factory $instance */ + $instance->assertSent($callback); + } + /** + * Assert that a request / response pair was not recorded matching a given truth test. + * + * @param callable $callback + * @return void + * @static + */ + public static function assertNotSent($callback) + { + /** @var \Illuminate\Http\Client\Factory $instance */ + $instance->assertNotSent($callback); + } + /** + * Assert that no request / response pair was recorded. + * + * @return void + * @static + */ + public static function assertNothingSent() + { + /** @var \Illuminate\Http\Client\Factory $instance */ + $instance->assertNothingSent(); + } + /** + * Assert how many requests have been recorded. + * + * @param int $count + * @return void + * @static + */ + public static function assertSentCount($count) + { + /** @var \Illuminate\Http\Client\Factory $instance */ + $instance->assertSentCount($count); + } + /** + * Assert that every created response sequence is empty. + * + * @return void + * @static + */ + public static function assertSequencesAreEmpty() + { + /** @var \Illuminate\Http\Client\Factory $instance */ + $instance->assertSequencesAreEmpty(); + } + /** + * Get a collection of the request / response pairs matching the given truth test. + * + * @param callable $callback + * @return \Illuminate\Support\Collection + * @static + */ + public static function recorded($callback) + { + /** @var \Illuminate\Http\Client\Factory $instance */ + return $instance->recorded($callback); + } + /** + * Register a custom macro. + * + * @param string $name + * @param object|callable $macro + * @return void + * @static + */ + public static function macro($name, $macro) + { + \Illuminate\Http\Client\Factory::macro($name, $macro); + } + /** + * Mix another object into the class. + * + * @param object $mixin + * @param bool $replace + * @return void + * @throws \ReflectionException + * @static + */ + public static function mixin($mixin, $replace = true) + { + \Illuminate\Http\Client\Factory::mixin($mixin, $replace); + } + /** + * Checks if macro is registered. + * + * @param string $name + * @return bool + * @static + */ + public static function hasMacro($name) + { + return \Illuminate\Http\Client\Factory::hasMacro($name); + } + /** + * Dynamically handle calls to the class. + * + * @param string $method + * @param array $parameters + * @return mixed + * @throws \BadMethodCallException + * @static + */ + public static function macroCall($method, $parameters) + { + /** @var \Illuminate\Http\Client\Factory $instance */ + return $instance->macroCall($method, $parameters); + } + + } + /** + * + * + * @see \Illuminate\Translation\Translator + */ + class Lang { + /** + * Determine if a translation exists for a given locale. + * + * @param string $key + * @param string|null $locale + * @return bool + * @static + */ + public static function hasForLocale($key, $locale = null) + { + /** @var \Illuminate\Translation\Translator $instance */ + return $instance->hasForLocale($key, $locale); + } + /** + * Determine if a translation exists. + * + * @param string $key + * @param string|null $locale + * @param bool $fallback + * @return bool + * @static + */ + public static function has($key, $locale = null, $fallback = true) + { + /** @var \Illuminate\Translation\Translator $instance */ + return $instance->has($key, $locale, $fallback); + } + /** + * Get the translation for the given key. + * + * @param string $key + * @param array $replace + * @param string|null $locale + * @param bool $fallback + * @return string|array + * @static + */ + public static function get($key, $replace = [], $locale = null, $fallback = true) + { + /** @var \Illuminate\Translation\Translator $instance */ + return $instance->get($key, $replace, $locale, $fallback); + } + /** + * Get a translation according to an integer value. + * + * @param string $key + * @param \Countable|int|array $number + * @param array $replace + * @param string|null $locale + * @return string + * @static + */ + public static function choice($key, $number, $replace = [], $locale = null) + { + /** @var \Illuminate\Translation\Translator $instance */ + return $instance->choice($key, $number, $replace, $locale); + } + /** + * Add translation lines to the given locale. + * + * @param array $lines + * @param string $locale + * @param string $namespace + * @return void + * @static + */ + public static function addLines($lines, $locale, $namespace = '*') + { + /** @var \Illuminate\Translation\Translator $instance */ + $instance->addLines($lines, $locale, $namespace); + } + /** + * Load the specified language group. + * + * @param string $namespace + * @param string $group + * @param string $locale + * @return void + * @static + */ + public static function load($namespace, $group, $locale) + { + /** @var \Illuminate\Translation\Translator $instance */ + $instance->load($namespace, $group, $locale); + } + /** + * Add a new namespace to the loader. + * + * @param string $namespace + * @param string $hint + * @return void + * @static + */ + public static function addNamespace($namespace, $hint) + { + /** @var \Illuminate\Translation\Translator $instance */ + $instance->addNamespace($namespace, $hint); + } + /** + * Add a new JSON path to the loader. + * + * @param string $path + * @return void + * @static + */ + public static function addJsonPath($path) + { + /** @var \Illuminate\Translation\Translator $instance */ + $instance->addJsonPath($path); + } + /** + * Parse a key into namespace, group, and item. + * + * @param string $key + * @return array + * @static + */ + public static function parseKey($key) + { + /** @var \Illuminate\Translation\Translator $instance */ + return $instance->parseKey($key); + } + /** + * Get the message selector instance. + * + * @return \Illuminate\Translation\MessageSelector + * @static + */ + public static function getSelector() + { + /** @var \Illuminate\Translation\Translator $instance */ + return $instance->getSelector(); + } + /** + * Set the message selector instance. + * + * @param \Illuminate\Translation\MessageSelector $selector + * @return void + * @static + */ + public static function setSelector($selector) + { + /** @var \Illuminate\Translation\Translator $instance */ + $instance->setSelector($selector); + } + /** + * Get the language line loader implementation. + * + * @return \Illuminate\Contracts\Translation\Loader + * @static + */ + public static function getLoader() + { + /** @var \Illuminate\Translation\Translator $instance */ + return $instance->getLoader(); + } + /** + * Get the default locale being used. + * + * @return string + * @static + */ + public static function locale() + { + /** @var \Illuminate\Translation\Translator $instance */ + return $instance->locale(); + } + /** + * Get the default locale being used. + * + * @return string + * @static + */ + public static function getLocale() + { + /** @var \Illuminate\Translation\Translator $instance */ + return $instance->getLocale(); + } + /** + * Set the default locale. + * + * @param string $locale + * @return void + * @static + */ + public static function setLocale($locale) + { + /** @var \Illuminate\Translation\Translator $instance */ + $instance->setLocale($locale); + } + /** + * Get the fallback locale being used. + * + * @return string + * @static + */ + public static function getFallback() + { + /** @var \Illuminate\Translation\Translator $instance */ + return $instance->getFallback(); + } + /** + * Set the fallback locale being used. + * + * @param string $fallback + * @return void + * @static + */ + public static function setFallback($fallback) + { + /** @var \Illuminate\Translation\Translator $instance */ + $instance->setFallback($fallback); + } + /** + * Set the loaded translation groups. + * + * @param array $loaded + * @return void + * @static + */ + public static function setLoaded($loaded) + { + /** @var \Illuminate\Translation\Translator $instance */ + $instance->setLoaded($loaded); + } + /** + * Set the parsed value of a key. + * + * @param string $key + * @param array $parsed + * @return void + * @static + */ + public static function setParsedKey($key, $parsed) + { //Method inherited from \Illuminate\Support\NamespacedItemResolver + /** @var \Illuminate\Translation\Translator $instance */ + $instance->setParsedKey($key, $parsed); + } + /** + * Register a custom macro. + * + * @param string $name + * @param object|callable $macro + * @return void + * @static + */ + public static function macro($name, $macro) + { + \Illuminate\Translation\Translator::macro($name, $macro); + } + /** + * Mix another object into the class. + * + * @param object $mixin + * @param bool $replace + * @return void + * @throws \ReflectionException + * @static + */ + public static function mixin($mixin, $replace = true) + { + \Illuminate\Translation\Translator::mixin($mixin, $replace); + } + /** + * Checks if macro is registered. + * + * @param string $name + * @return bool + * @static + */ + public static function hasMacro($name) + { + return \Illuminate\Translation\Translator::hasMacro($name); + } + + } + /** + * + * + * @see \Illuminate\Log\Logger + */ + class Log { + /** + * Create a new, on-demand aggregate logger instance. + * + * @param array $channels + * @param string|null $channel + * @return \Psr\Log\LoggerInterface + * @static + */ + public static function stack($channels, $channel = null) + { + /** @var \Illuminate\Log\LogManager $instance */ + return $instance->stack($channels, $channel); + } + /** + * Get a log channel instance. + * + * @param string|null $channel + * @return \Psr\Log\LoggerInterface + * @static + */ + public static function channel($channel = null) + { + /** @var \Illuminate\Log\LogManager $instance */ + return $instance->channel($channel); + } + /** + * Get a log driver instance. + * + * @param string|null $driver + * @return \Psr\Log\LoggerInterface + * @static + */ + public static function driver($driver = null) + { + /** @var \Illuminate\Log\LogManager $instance */ + return $instance->driver($driver); + } + /** + * + * + * @return array + * @static + */ + public static function getChannels() + { + /** @var \Illuminate\Log\LogManager $instance */ + return $instance->getChannels(); + } + /** + * Get the default log driver name. + * + * @return string + * @static + */ + public static function getDefaultDriver() + { + /** @var \Illuminate\Log\LogManager $instance */ + return $instance->getDefaultDriver(); + } + /** + * Set the default log driver name. + * + * @param string $name + * @return void + * @static + */ + public static function setDefaultDriver($name) + { + /** @var \Illuminate\Log\LogManager $instance */ + $instance->setDefaultDriver($name); + } + /** + * Register a custom driver creator Closure. + * + * @param string $driver + * @param \Closure $callback + * @return \Illuminate\Log\LogManager + * @static + */ + public static function extend($driver, $callback) + { + /** @var \Illuminate\Log\LogManager $instance */ + return $instance->extend($driver, $callback); + } + /** + * Unset the given channel instance. + * + * @param string|null $driver + * @return \Illuminate\Log\LogManager + * @static + */ + public static function forgetChannel($driver = null) + { + /** @var \Illuminate\Log\LogManager $instance */ + return $instance->forgetChannel($driver); + } + /** + * System is unusable. + * + * @param string $message + * @param array $context + * @return void + * @static + */ + public static function emergency($message, $context = []) + { + /** @var \Illuminate\Log\LogManager $instance */ + $instance->emergency($message, $context); + } + /** + * Action must be taken immediately. + * + * Example: Entire website down, database unavailable, etc. This should + * trigger the SMS alerts and wake you up. + * + * @param string $message + * @param array $context + * @return void + * @static + */ + public static function alert($message, $context = []) + { + /** @var \Illuminate\Log\LogManager $instance */ + $instance->alert($message, $context); + } + /** + * Critical conditions. + * + * Example: Application component unavailable, unexpected exception. + * + * @param string $message + * @param array $context + * @return void + * @static + */ + public static function critical($message, $context = []) + { + /** @var \Illuminate\Log\LogManager $instance */ + $instance->critical($message, $context); + } + /** + * Runtime errors that do not require immediate action but should typically + * be logged and monitored. + * + * @param string $message + * @param array $context + * @return void + * @static + */ + public static function error($message, $context = []) + { + /** @var \Illuminate\Log\LogManager $instance */ + $instance->error($message, $context); + } + /** + * Exceptional occurrences that are not errors. + * + * Example: Use of deprecated APIs, poor use of an API, undesirable things + * that are not necessarily wrong. + * + * @param string $message + * @param array $context + * @return void + * @static + */ + public static function warning($message, $context = []) + { + /** @var \Illuminate\Log\LogManager $instance */ + $instance->warning($message, $context); + } + /** + * Normal but significant events. + * + * @param string $message + * @param array $context + * @return void + * @static + */ + public static function notice($message, $context = []) + { + /** @var \Illuminate\Log\LogManager $instance */ + $instance->notice($message, $context); + } + /** + * Interesting events. + * + * Example: User logs in, SQL logs. + * + * @param string $message + * @param array $context + * @return void + * @static + */ + public static function info($message, $context = []) + { + /** @var \Illuminate\Log\LogManager $instance */ + $instance->info($message, $context); + } + /** + * Detailed debug information. + * + * @param string $message + * @param array $context + * @return void + * @static + */ + public static function debug($message, $context = []) + { + /** @var \Illuminate\Log\LogManager $instance */ + $instance->debug($message, $context); + } + /** + * Logs with an arbitrary level. + * + * @param mixed $level + * @param string $message + * @param array $context + * @return void + * @static + */ + public static function log($level, $message, $context = []) + { + /** @var \Illuminate\Log\LogManager $instance */ + $instance->log($level, $message, $context); + } + + } + /** + * + * + * @see \Illuminate\Mail\Mailer + * @see \Illuminate\Support\Testing\Fakes\MailFake + */ + class Mail { + /** + * Get a mailer instance by name. + * + * @param string|null $name + * @return \Illuminate\Mail\Mailer + * @static + */ + public static function mailer($name = null) + { + /** @var \Illuminate\Mail\MailManager $instance */ + return $instance->mailer($name); + } + /** + * Get a mailer driver instance. + * + * @param string|null $driver + * @return \Illuminate\Mail\Mailer + * @static + */ + public static function driver($driver = null) + { + /** @var \Illuminate\Mail\MailManager $instance */ + return $instance->driver($driver); + } + /** + * Create a new transport instance. + * + * @param array $config + * @return \Swift_Transport + * @static + */ + public static function createTransport($config) + { + /** @var \Illuminate\Mail\MailManager $instance */ + return $instance->createTransport($config); + } + /** + * Get the default mail driver name. + * + * @return string + * @static + */ + public static function getDefaultDriver() + { + /** @var \Illuminate\Mail\MailManager $instance */ + return $instance->getDefaultDriver(); + } + /** + * Set the default mail driver name. + * + * @param string $name + * @return void + * @static + */ + public static function setDefaultDriver($name) + { + /** @var \Illuminate\Mail\MailManager $instance */ + $instance->setDefaultDriver($name); + } + /** + * Register a custom transport creator Closure. + * + * @param string $driver + * @param \Closure $callback + * @return \Illuminate\Mail\MailManager + * @static + */ + public static function extend($driver, $callback) + { + /** @var \Illuminate\Mail\MailManager $instance */ + return $instance->extend($driver, $callback); + } + /** + * Assert if a mailable was sent based on a truth-test callback. + * + * @param string|\Closure $mailable + * @param callable|int|null $callback + * @return void + * @static + */ + public static function assertSent($mailable, $callback = null) + { + /** @var \Illuminate\Support\Testing\Fakes\MailFake $instance */ + $instance->assertSent($mailable, $callback); + } + /** + * Determine if a mailable was not sent based on a truth-test callback. + * + * @param string $mailable + * @param callable|null $callback + * @return void + * @static + */ + public static function assertNotSent($mailable, $callback = null) + { + /** @var \Illuminate\Support\Testing\Fakes\MailFake $instance */ + $instance->assertNotSent($mailable, $callback); + } + /** + * Assert that no mailables were sent. + * + * @return void + * @static + */ + public static function assertNothingSent() + { + /** @var \Illuminate\Support\Testing\Fakes\MailFake $instance */ + $instance->assertNothingSent(); + } + /** + * Assert if a mailable was queued based on a truth-test callback. + * + * @param string|\Closure $mailable + * @param callable|int|null $callback + * @return void + * @static + */ + public static function assertQueued($mailable, $callback = null) + { + /** @var \Illuminate\Support\Testing\Fakes\MailFake $instance */ + $instance->assertQueued($mailable, $callback); + } + /** + * Determine if a mailable was not queued based on a truth-test callback. + * + * @param string $mailable + * @param callable|null $callback + * @return void + * @static + */ + public static function assertNotQueued($mailable, $callback = null) + { + /** @var \Illuminate\Support\Testing\Fakes\MailFake $instance */ + $instance->assertNotQueued($mailable, $callback); + } + /** + * Assert that no mailables were queued. + * + * @return void + * @static + */ + public static function assertNothingQueued() + { + /** @var \Illuminate\Support\Testing\Fakes\MailFake $instance */ + $instance->assertNothingQueued(); + } + /** + * Get all of the mailables matching a truth-test callback. + * + * @param string $mailable + * @param callable|null $callback + * @return \Illuminate\Support\Collection + * @static + */ + public static function sent($mailable, $callback = null) + { + /** @var \Illuminate\Support\Testing\Fakes\MailFake $instance */ + return $instance->sent($mailable, $callback); + } + /** + * Determine if the given mailable has been sent. + * + * @param string $mailable + * @return bool + * @static + */ + public static function hasSent($mailable) + { + /** @var \Illuminate\Support\Testing\Fakes\MailFake $instance */ + return $instance->hasSent($mailable); + } + /** + * Get all of the queued mailables matching a truth-test callback. + * + * @param string $mailable + * @param callable|null $callback + * @return \Illuminate\Support\Collection + * @static + */ + public static function queued($mailable, $callback = null) + { + /** @var \Illuminate\Support\Testing\Fakes\MailFake $instance */ + return $instance->queued($mailable, $callback); + } + /** + * Determine if the given mailable has been queued. + * + * @param string $mailable + * @return bool + * @static + */ + public static function hasQueued($mailable) + { + /** @var \Illuminate\Support\Testing\Fakes\MailFake $instance */ + return $instance->hasQueued($mailable); + } + /** + * Begin the process of mailing a mailable class instance. + * + * @param mixed $users + * @return \Illuminate\Mail\PendingMail + * @static + */ + public static function to($users) + { + /** @var \Illuminate\Support\Testing\Fakes\MailFake $instance */ + return $instance->to($users); + } + /** + * Begin the process of mailing a mailable class instance. + * + * @param mixed $users + * @return \Illuminate\Mail\PendingMail + * @static + */ + public static function bcc($users) + { + /** @var \Illuminate\Support\Testing\Fakes\MailFake $instance */ + return $instance->bcc($users); + } + /** + * Send a new message with only a raw text part. + * + * @param string $text + * @param \Closure|string $callback + * @return void + * @static + */ + public static function raw($text, $callback) + { + /** @var \Illuminate\Support\Testing\Fakes\MailFake $instance */ + $instance->raw($text, $callback); + } + /** + * Send a new message using a view. + * + * @param string|array $view + * @param array $data + * @param \Closure|string|null $callback + * @return void + * @static + */ + public static function send($view, $data = [], $callback = null) + { + /** @var \Illuminate\Support\Testing\Fakes\MailFake $instance */ + $instance->send($view, $data, $callback); + } + /** + * Queue a new e-mail message for sending. + * + * @param string|array $view + * @param string|null $queue + * @return mixed + * @static + */ + public static function queue($view, $queue = null) + { + /** @var \Illuminate\Support\Testing\Fakes\MailFake $instance */ + return $instance->queue($view, $queue); + } + /** + * Queue a new e-mail message for sending after (n) seconds. + * + * @param \DateTimeInterface|\DateInterval|int $delay + * @param \Illuminate\Contracts\Mail\Mailable|string|array $view + * @param string|null $queue + * @return mixed + * @static + */ + public static function later($delay, $view, $queue = null) + { + /** @var \Illuminate\Support\Testing\Fakes\MailFake $instance */ + return $instance->later($delay, $view, $queue); + } + /** + * Get the array of failed recipients. + * + * @return array + * @static + */ + public static function failures() + { + /** @var \Illuminate\Support\Testing\Fakes\MailFake $instance */ + return $instance->failures(); + } + + } + /** + * + * + * @see \Illuminate\Notifications\ChannelManager + */ + class Notification { + /** + * Send the given notification to the given notifiable entities. + * + * @param \Illuminate\Support\Collection|array|mixed $notifiables + * @param mixed $notification + * @return void + * @static + */ + public static function send($notifiables, $notification) + { + /** @var \Illuminate\Notifications\ChannelManager $instance */ + $instance->send($notifiables, $notification); + } + /** + * Send the given notification immediately. + * + * @param \Illuminate\Support\Collection|array|mixed $notifiables + * @param mixed $notification + * @param array|null $channels + * @return void + * @static + */ + public static function sendNow($notifiables, $notification, $channels = null) + { + /** @var \Illuminate\Notifications\ChannelManager $instance */ + $instance->sendNow($notifiables, $notification, $channels); + } + /** + * Get a channel instance. + * + * @param string|null $name + * @return mixed + * @static + */ + public static function channel($name = null) + { + /** @var \Illuminate\Notifications\ChannelManager $instance */ + return $instance->channel($name); + } + /** + * Get the default channel driver name. + * + * @return string + * @static + */ + public static function getDefaultDriver() + { + /** @var \Illuminate\Notifications\ChannelManager $instance */ + return $instance->getDefaultDriver(); + } + /** + * Get the default channel driver name. + * + * @return string + * @static + */ + public static function deliversVia() + { + /** @var \Illuminate\Notifications\ChannelManager $instance */ + return $instance->deliversVia(); + } + /** + * Set the default channel driver name. + * + * @param string $channel + * @return void + * @static + */ + public static function deliverVia($channel) + { + /** @var \Illuminate\Notifications\ChannelManager $instance */ + $instance->deliverVia($channel); + } + /** + * Set the locale of notifications. + * + * @param string $locale + * @return \Illuminate\Notifications\ChannelManager + * @static + */ + public static function locale($locale) + { + /** @var \Illuminate\Notifications\ChannelManager $instance */ + return $instance->locale($locale); + } + /** + * Get a driver instance. + * + * @param string|null $driver + * @return mixed + * @throws \InvalidArgumentException + * @static + */ + public static function driver($driver = null) + { //Method inherited from \Illuminate\Support\Manager + /** @var \Illuminate\Notifications\ChannelManager $instance */ + return $instance->driver($driver); + } + /** + * Register a custom driver creator Closure. + * + * @param string $driver + * @param \Closure $callback + * @return \Illuminate\Notifications\ChannelManager + * @static + */ + public static function extend($driver, $callback) + { //Method inherited from \Illuminate\Support\Manager + /** @var \Illuminate\Notifications\ChannelManager $instance */ + return $instance->extend($driver, $callback); + } + /** + * Get all of the created "drivers". + * + * @return array + * @static + */ + public static function getDrivers() + { //Method inherited from \Illuminate\Support\Manager + /** @var \Illuminate\Notifications\ChannelManager $instance */ + return $instance->getDrivers(); + } + /** + * Assert if a notification was sent based on a truth-test callback. + * + * @param mixed $notifiable + * @param string|\Closure $notification + * @param callable|null $callback + * @return void + * @throws \Exception + * @static + */ + public static function assertSentTo($notifiable, $notification, $callback = null) + { + /** @var \Illuminate\Support\Testing\Fakes\NotificationFake $instance */ + $instance->assertSentTo($notifiable, $notification, $callback); + } + /** + * Assert if a notification was sent a number of times. + * + * @param mixed $notifiable + * @param string $notification + * @param int $times + * @return void + * @static + */ + public static function assertSentToTimes($notifiable, $notification, $times = 1) + { + /** @var \Illuminate\Support\Testing\Fakes\NotificationFake $instance */ + $instance->assertSentToTimes($notifiable, $notification, $times); + } + /** + * Determine if a notification was sent based on a truth-test callback. + * + * @param mixed $notifiable + * @param string|\Closure $notification + * @param callable|null $callback + * @return void + * @throws \Exception + * @static + */ + public static function assertNotSentTo($notifiable, $notification, $callback = null) + { + /** @var \Illuminate\Support\Testing\Fakes\NotificationFake $instance */ + $instance->assertNotSentTo($notifiable, $notification, $callback); + } + /** + * Assert that no notifications were sent. + * + * @return void + * @static + */ + public static function assertNothingSent() + { + /** @var \Illuminate\Support\Testing\Fakes\NotificationFake $instance */ + $instance->assertNothingSent(); + } + /** + * Assert the total amount of times a notification was sent. + * + * @param int $expectedCount + * @param string $notification + * @return void + * @static + */ + public static function assertTimesSent($expectedCount, $notification) + { + /** @var \Illuminate\Support\Testing\Fakes\NotificationFake $instance */ + $instance->assertTimesSent($expectedCount, $notification); + } + /** + * Get all of the notifications matching a truth-test callback. + * + * @param mixed $notifiable + * @param string $notification + * @param callable|null $callback + * @return \Illuminate\Support\Collection + * @static + */ + public static function sent($notifiable, $notification, $callback = null) + { + /** @var \Illuminate\Support\Testing\Fakes\NotificationFake $instance */ + return $instance->sent($notifiable, $notification, $callback); + } + /** + * Determine if there are more notifications left to inspect. + * + * @param mixed $notifiable + * @param string $notification + * @return bool + * @static + */ + public static function hasSent($notifiable, $notification) + { + /** @var \Illuminate\Support\Testing\Fakes\NotificationFake $instance */ + return $instance->hasSent($notifiable, $notification); + } + /** + * Register a custom macro. + * + * @param string $name + * @param object|callable $macro + * @return void + * @static + */ + public static function macro($name, $macro) + { + \Illuminate\Support\Testing\Fakes\NotificationFake::macro($name, $macro); + } + /** + * Mix another object into the class. + * + * @param object $mixin + * @param bool $replace + * @return void + * @throws \ReflectionException + * @static + */ + public static function mixin($mixin, $replace = true) + { + \Illuminate\Support\Testing\Fakes\NotificationFake::mixin($mixin, $replace); + } + /** + * Checks if macro is registered. + * + * @param string $name + * @return bool + * @static + */ + public static function hasMacro($name) + { + return \Illuminate\Support\Testing\Fakes\NotificationFake::hasMacro($name); + } + + } + /** + * + * + * @method static mixed reset(array $credentials, \Closure $callback) + * @method static string sendResetLink(array $credentials) + * @method static \Illuminate\Contracts\Auth\CanResetPassword getUser(array $credentials) + * @method static string createToken(\Illuminate\Contracts\Auth\CanResetPassword $user) + * @method static void deleteToken(\Illuminate\Contracts\Auth\CanResetPassword $user) + * @method static bool tokenExists(\Illuminate\Contracts\Auth\CanResetPassword $user, string $token) + * @method static \Illuminate\Auth\Passwords\TokenRepositoryInterface getRepository() + * @see \Illuminate\Auth\Passwords\PasswordBroker + */ + class Password { + /** + * Attempt to get the broker from the local cache. + * + * @param string|null $name + * @return \Illuminate\Contracts\Auth\PasswordBroker + * @static + */ + public static function broker($name = null) + { + /** @var \Illuminate\Auth\Passwords\PasswordBrokerManager $instance */ + return $instance->broker($name); + } + /** + * Get the default password broker name. + * + * @return string + * @static + */ + public static function getDefaultDriver() + { + /** @var \Illuminate\Auth\Passwords\PasswordBrokerManager $instance */ + return $instance->getDefaultDriver(); + } + /** + * Set the default password broker name. + * + * @param string $name + * @return void + * @static + */ + public static function setDefaultDriver($name) + { + /** @var \Illuminate\Auth\Passwords\PasswordBrokerManager $instance */ + $instance->setDefaultDriver($name); + } + + } + /** + * + * + * @see \Illuminate\Queue\QueueManager + * @see \Illuminate\Queue\Queue + */ + class Queue { + /** + * Register an event listener for the before job event. + * + * @param mixed $callback + * @return void + * @static + */ + public static function before($callback) + { + /** @var \Illuminate\Queue\QueueManager $instance */ + $instance->before($callback); + } + /** + * Register an event listener for the after job event. + * + * @param mixed $callback + * @return void + * @static + */ + public static function after($callback) + { + /** @var \Illuminate\Queue\QueueManager $instance */ + $instance->after($callback); + } + /** + * Register an event listener for the exception occurred job event. + * + * @param mixed $callback + * @return void + * @static + */ + public static function exceptionOccurred($callback) + { + /** @var \Illuminate\Queue\QueueManager $instance */ + $instance->exceptionOccurred($callback); + } + /** + * Register an event listener for the daemon queue loop. + * + * @param mixed $callback + * @return void + * @static + */ + public static function looping($callback) + { + /** @var \Illuminate\Queue\QueueManager $instance */ + $instance->looping($callback); + } + /** + * Register an event listener for the failed job event. + * + * @param mixed $callback + * @return void + * @static + */ + public static function failing($callback) + { + /** @var \Illuminate\Queue\QueueManager $instance */ + $instance->failing($callback); + } + /** + * Register an event listener for the daemon queue stopping. + * + * @param mixed $callback + * @return void + * @static + */ + public static function stopping($callback) + { + /** @var \Illuminate\Queue\QueueManager $instance */ + $instance->stopping($callback); + } + /** + * Determine if the driver is connected. + * + * @param string|null $name + * @return bool + * @static + */ + public static function connected($name = null) + { + /** @var \Illuminate\Queue\QueueManager $instance */ + return $instance->connected($name); + } + /** + * Resolve a queue connection instance. + * + * @param string|null $name + * @return \Illuminate\Contracts\Queue\Queue + * @static + */ + public static function connection($name = null) + { + /** @var \Illuminate\Queue\QueueManager $instance */ + return $instance->connection($name); + } + /** + * Add a queue connection resolver. + * + * @param string $driver + * @param \Closure $resolver + * @return void + * @static + */ + public static function extend($driver, $resolver) + { + /** @var \Illuminate\Queue\QueueManager $instance */ + $instance->extend($driver, $resolver); + } + /** + * Add a queue connection resolver. + * + * @param string $driver + * @param \Closure $resolver + * @return void + * @static + */ + public static function addConnector($driver, $resolver) + { + /** @var \Illuminate\Queue\QueueManager $instance */ + $instance->addConnector($driver, $resolver); + } + /** + * Get the name of the default queue connection. + * + * @return string + * @static + */ + public static function getDefaultDriver() + { + /** @var \Illuminate\Queue\QueueManager $instance */ + return $instance->getDefaultDriver(); + } + /** + * Set the name of the default queue connection. + * + * @param string $name + * @return void + * @static + */ + public static function setDefaultDriver($name) + { + /** @var \Illuminate\Queue\QueueManager $instance */ + $instance->setDefaultDriver($name); + } + /** + * Get the full name for the given connection. + * + * @param string|null $connection + * @return string + * @static + */ + public static function getName($connection = null) + { + /** @var \Illuminate\Queue\QueueManager $instance */ + return $instance->getName($connection); + } + /** + * Assert if a job was pushed based on a truth-test callback. + * + * @param string|\Closure $job + * @param callable|int|null $callback + * @return void + * @static + */ + public static function assertPushed($job, $callback = null) + { + /** @var \Illuminate\Support\Testing\Fakes\QueueFake $instance */ + $instance->assertPushed($job, $callback); + } + /** + * Assert if a job was pushed based on a truth-test callback. + * + * @param string $queue + * @param string|\Closure $job + * @param callable|null $callback + * @return void + * @static + */ + public static function assertPushedOn($queue, $job, $callback = null) + { + /** @var \Illuminate\Support\Testing\Fakes\QueueFake $instance */ + $instance->assertPushedOn($queue, $job, $callback); + } + /** + * Assert if a job was pushed with chained jobs based on a truth-test callback. + * + * @param string $job + * @param array $expectedChain + * @param callable|null $callback + * @return void + * @static + */ + public static function assertPushedWithChain($job, $expectedChain = [], $callback = null) + { + /** @var \Illuminate\Support\Testing\Fakes\QueueFake $instance */ + $instance->assertPushedWithChain($job, $expectedChain, $callback); + } + /** + * Assert if a job was pushed with an empty chain based on a truth-test callback. + * + * @param string $job + * @param callable|null $callback + * @return void + * @static + */ + public static function assertPushedWithoutChain($job, $callback = null) + { + /** @var \Illuminate\Support\Testing\Fakes\QueueFake $instance */ + $instance->assertPushedWithoutChain($job, $callback); + } + /** + * Determine if a job was pushed based on a truth-test callback. + * + * @param string|\Closure $job + * @param callable|null $callback + * @return void + * @static + */ + public static function assertNotPushed($job, $callback = null) + { + /** @var \Illuminate\Support\Testing\Fakes\QueueFake $instance */ + $instance->assertNotPushed($job, $callback); + } + /** + * Assert that no jobs were pushed. + * + * @return void + * @static + */ + public static function assertNothingPushed() + { + /** @var \Illuminate\Support\Testing\Fakes\QueueFake $instance */ + $instance->assertNothingPushed(); + } + /** + * Get all of the jobs matching a truth-test callback. + * + * @param string $job + * @param callable|null $callback + * @return \Illuminate\Support\Collection + * @static + */ + public static function pushed($job, $callback = null) + { + /** @var \Illuminate\Support\Testing\Fakes\QueueFake $instance */ + return $instance->pushed($job, $callback); + } + /** + * Determine if there are any stored jobs for a given class. + * + * @param string $job + * @return bool + * @static + */ + public static function hasPushed($job) + { + /** @var \Illuminate\Support\Testing\Fakes\QueueFake $instance */ + return $instance->hasPushed($job); + } + /** + * Get the size of the queue. + * + * @param string|null $queue + * @return int + * @static + */ + public static function size($queue = null) + { + /** @var \Illuminate\Support\Testing\Fakes\QueueFake $instance */ + return $instance->size($queue); + } + /** + * Push a new job onto the queue. + * + * @param string $job + * @param mixed $data + * @param string|null $queue + * @return mixed + * @static + */ + public static function push($job, $data = '', $queue = null) + { + /** @var \Illuminate\Support\Testing\Fakes\QueueFake $instance */ + return $instance->push($job, $data, $queue); + } + /** + * Push a raw payload onto the queue. + * + * @param string $payload + * @param string|null $queue + * @param array $options + * @return mixed + * @static + */ + public static function pushRaw($payload, $queue = null, $options = []) + { + /** @var \Illuminate\Support\Testing\Fakes\QueueFake $instance */ + return $instance->pushRaw($payload, $queue, $options); + } + /** + * Push a new job onto the queue after a delay. + * + * @param \DateTimeInterface|\DateInterval|int $delay + * @param string $job + * @param mixed $data + * @param string|null $queue + * @return mixed + * @static + */ + public static function later($delay, $job, $data = '', $queue = null) + { + /** @var \Illuminate\Support\Testing\Fakes\QueueFake $instance */ + return $instance->later($delay, $job, $data, $queue); + } + /** + * Push a new job onto the queue. + * + * @param string $queue + * @param string $job + * @param mixed $data + * @return mixed + * @static + */ + public static function pushOn($queue, $job, $data = '') + { + /** @var \Illuminate\Support\Testing\Fakes\QueueFake $instance */ + return $instance->pushOn($queue, $job, $data); + } + /** + * Push a new job onto the queue after a delay. + * + * @param string $queue + * @param \DateTimeInterface|\DateInterval|int $delay + * @param string $job + * @param mixed $data + * @return mixed + * @static + */ + public static function laterOn($queue, $delay, $job, $data = '') + { + /** @var \Illuminate\Support\Testing\Fakes\QueueFake $instance */ + return $instance->laterOn($queue, $delay, $job, $data); + } + /** + * Pop the next job off of the queue. + * + * @param string|null $queue + * @return \Illuminate\Contracts\Queue\Job|null + * @static + */ + public static function pop($queue = null) + { + /** @var \Illuminate\Support\Testing\Fakes\QueueFake $instance */ + return $instance->pop($queue); + } + /** + * Push an array of jobs onto the queue. + * + * @param array $jobs + * @param mixed $data + * @param string|null $queue + * @return mixed + * @static + */ + public static function bulk($jobs, $data = '', $queue = null) + { + /** @var \Illuminate\Support\Testing\Fakes\QueueFake $instance */ + return $instance->bulk($jobs, $data, $queue); + } + /** + * Get the jobs that have been pushed. + * + * @return array + * @static + */ + public static function pushedJobs() + { + /** @var \Illuminate\Support\Testing\Fakes\QueueFake $instance */ + return $instance->pushedJobs(); + } + /** + * Get the connection name for the queue. + * + * @return string + * @static + */ + public static function getConnectionName() + { + /** @var \Illuminate\Support\Testing\Fakes\QueueFake $instance */ + return $instance->getConnectionName(); + } + /** + * Set the connection name for the queue. + * + * @param string $name + * @return \Illuminate\Support\Testing\Fakes\QueueFake + * @static + */ + public static function setConnectionName($name) + { + /** @var \Illuminate\Support\Testing\Fakes\QueueFake $instance */ + return $instance->setConnectionName($name); + } + /** + * Get the retry delay for an object-based queue handler. + * + * @param mixed $job + * @return mixed + * @static + */ + public static function getJobRetryDelay($job) + { //Method inherited from \Illuminate\Queue\Queue + /** @var \Illuminate\Queue\SyncQueue $instance */ + return $instance->getJobRetryDelay($job); + } + /** + * Get the expiration timestamp for an object-based queue handler. + * + * @param mixed $job + * @return mixed + * @static + */ + public static function getJobExpiration($job) + { //Method inherited from \Illuminate\Queue\Queue + /** @var \Illuminate\Queue\SyncQueue $instance */ + return $instance->getJobExpiration($job); + } + /** + * Register a callback to be executed when creating job payloads. + * + * @param callable $callback + * @return void + * @static + */ + public static function createPayloadUsing($callback) + { //Method inherited from \Illuminate\Queue\Queue + \Illuminate\Queue\SyncQueue::createPayloadUsing($callback); + } + /** + * Set the IoC container instance. + * + * @param \Illuminate\Container\Container $container + * @return void + * @static + */ + public static function setContainer($container) + { //Method inherited from \Illuminate\Queue\Queue + /** @var \Illuminate\Queue\SyncQueue $instance */ + $instance->setContainer($container); + } + + } + /** + * + * + * @see \Illuminate\Routing\Redirector + */ + class Redirect { + /** + * Create a new redirect response to the "home" route. + * + * @param int $status + * @return \Illuminate\Http\RedirectResponse + * @static + */ + public static function home($status = 302) + { + /** @var \Illuminate\Routing\Redirector $instance */ + return $instance->home($status); + } + /** + * Create a new redirect response to the previous location. + * + * @param int $status + * @param array $headers + * @param mixed $fallback + * @return \Illuminate\Http\RedirectResponse + * @static + */ + public static function back($status = 302, $headers = [], $fallback = false) + { + /** @var \Illuminate\Routing\Redirector $instance */ + return $instance->back($status, $headers, $fallback); + } + /** + * Create a new redirect response to the current URI. + * + * @param int $status + * @param array $headers + * @return \Illuminate\Http\RedirectResponse + * @static + */ + public static function refresh($status = 302, $headers = []) + { + /** @var \Illuminate\Routing\Redirector $instance */ + return $instance->refresh($status, $headers); + } + /** + * Create a new redirect response, while putting the current URL in the session. + * + * @param string $path + * @param int $status + * @param array $headers + * @param bool|null $secure + * @return \Illuminate\Http\RedirectResponse + * @static + */ + public static function guest($path, $status = 302, $headers = [], $secure = null) + { + /** @var \Illuminate\Routing\Redirector $instance */ + return $instance->guest($path, $status, $headers, $secure); + } + /** + * Create a new redirect response to the previously intended location. + * + * @param string $default + * @param int $status + * @param array $headers + * @param bool|null $secure + * @return \Illuminate\Http\RedirectResponse + * @static + */ + public static function intended($default = '/', $status = 302, $headers = [], $secure = null) + { + /** @var \Illuminate\Routing\Redirector $instance */ + return $instance->intended($default, $status, $headers, $secure); + } + /** + * Set the intended url. + * + * @param string $url + * @return void + * @static + */ + public static function setIntendedUrl($url) + { + /** @var \Illuminate\Routing\Redirector $instance */ + $instance->setIntendedUrl($url); + } + /** + * Create a new redirect response to the given path. + * + * @param string $path + * @param int $status + * @param array $headers + * @param bool|null $secure + * @return \Illuminate\Http\RedirectResponse + * @static + */ + public static function to($path, $status = 302, $headers = [], $secure = null) + { + /** @var \Illuminate\Routing\Redirector $instance */ + return $instance->to($path, $status, $headers, $secure); + } + /** + * Create a new redirect response to an external URL (no validation). + * + * @param string $path + * @param int $status + * @param array $headers + * @return \Illuminate\Http\RedirectResponse + * @static + */ + public static function away($path, $status = 302, $headers = []) + { + /** @var \Illuminate\Routing\Redirector $instance */ + return $instance->away($path, $status, $headers); + } + /** + * Create a new redirect response to the given HTTPS path. + * + * @param string $path + * @param int $status + * @param array $headers + * @return \Illuminate\Http\RedirectResponse + * @static + */ + public static function secure($path, $status = 302, $headers = []) + { + /** @var \Illuminate\Routing\Redirector $instance */ + return $instance->secure($path, $status, $headers); + } + /** + * Create a new redirect response to a named route. + * + * @param string $route + * @param mixed $parameters + * @param int $status + * @param array $headers + * @return \Illuminate\Http\RedirectResponse + * @static + */ + public static function route($route, $parameters = [], $status = 302, $headers = []) + { + /** @var \Illuminate\Routing\Redirector $instance */ + return $instance->route($route, $parameters, $status, $headers); + } + /** + * Create a new redirect response to a signed named route. + * + * @param string $route + * @param mixed $parameters + * @param \DateTimeInterface|\DateInterval|int|null $expiration + * @param int $status + * @param array $headers + * @return \Illuminate\Http\RedirectResponse + * @static + */ + public static function signedRoute($route, $parameters = [], $expiration = null, $status = 302, $headers = []) + { + /** @var \Illuminate\Routing\Redirector $instance */ + return $instance->signedRoute($route, $parameters, $expiration, $status, $headers); + } + /** + * Create a new redirect response to a signed named route. + * + * @param string $route + * @param \DateTimeInterface|\DateInterval|int|null $expiration + * @param mixed $parameters + * @param int $status + * @param array $headers + * @return \Illuminate\Http\RedirectResponse + * @static + */ + public static function temporarySignedRoute($route, $expiration, $parameters = [], $status = 302, $headers = []) + { + /** @var \Illuminate\Routing\Redirector $instance */ + return $instance->temporarySignedRoute($route, $expiration, $parameters, $status, $headers); + } + /** + * Create a new redirect response to a controller action. + * + * @param string|array $action + * @param mixed $parameters + * @param int $status + * @param array $headers + * @return \Illuminate\Http\RedirectResponse + * @static + */ + public static function action($action, $parameters = [], $status = 302, $headers = []) + { + /** @var \Illuminate\Routing\Redirector $instance */ + return $instance->action($action, $parameters, $status, $headers); + } + /** + * Get the URL generator instance. + * + * @return \Illuminate\Routing\UrlGenerator + * @static + */ + public static function getUrlGenerator() + { + /** @var \Illuminate\Routing\Redirector $instance */ + return $instance->getUrlGenerator(); + } + /** + * Set the active session store. + * + * @param \Illuminate\Session\Store $session + * @return void + * @static + */ + public static function setSession($session) + { + /** @var \Illuminate\Routing\Redirector $instance */ + $instance->setSession($session); + } + /** + * Register a custom macro. + * + * @param string $name + * @param object|callable $macro + * @return void + * @static + */ + public static function macro($name, $macro) + { + \Illuminate\Routing\Redirector::macro($name, $macro); + } + /** + * Mix another object into the class. + * + * @param object $mixin + * @param bool $replace + * @return void + * @throws \ReflectionException + * @static + */ + public static function mixin($mixin, $replace = true) + { + \Illuminate\Routing\Redirector::mixin($mixin, $replace); + } + /** + * Checks if macro is registered. + * + * @param string $name + * @return bool + * @static + */ + public static function hasMacro($name) + { + return \Illuminate\Routing\Redirector::hasMacro($name); + } + + } + /** + * + * + * @method static mixed filterFiles(mixed $files) + * @see \Illuminate\Http\Request + */ + class Request { + /** + * Create a new Illuminate HTTP request from server variables. + * + * @return static + * @static + */ + public static function capture() + { + return \Illuminate\Http\Request::capture(); + } + /** + * Return the Request instance. + * + * @return \Illuminate\Http\Request + * @static + */ + public static function instance() + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->instance(); + } + /** + * Get the request method. + * + * @return string + * @static + */ + public static function method() + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->method(); + } + /** + * Get the root URL for the application. + * + * @return string + * @static + */ + public static function root() + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->root(); + } + /** + * Get the URL (no query string) for the request. + * + * @return string + * @static + */ + public static function url() + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->url(); + } + /** + * Get the full URL for the request. + * + * @return string + * @static + */ + public static function fullUrl() + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->fullUrl(); + } + /** + * Get the full URL for the request with the added query string parameters. + * + * @param array $query + * @return string + * @static + */ + public static function fullUrlWithQuery($query) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->fullUrlWithQuery($query); + } + /** + * Get the current path info for the request. + * + * @return string + * @static + */ + public static function path() + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->path(); + } + /** + * Get the current decoded path info for the request. + * + * @return string + * @static + */ + public static function decodedPath() + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->decodedPath(); + } + /** + * Get a segment from the URI (1 based index). + * + * @param int $index + * @param string|null $default + * @return string|null + * @static + */ + public static function segment($index, $default = null) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->segment($index, $default); + } + /** + * Get all of the segments for the request path. + * + * @return array + * @static + */ + public static function segments() + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->segments(); + } + /** + * Determine if the current request URI matches a pattern. + * + * @param mixed $patterns + * @return bool + * @static + */ + public static function is(...$patterns) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->is(...$patterns); + } + /** + * Determine if the route name matches a given pattern. + * + * @param mixed $patterns + * @return bool + * @static + */ + public static function routeIs(...$patterns) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->routeIs(...$patterns); + } + /** + * Determine if the current request URL and query string matches a pattern. + * + * @param mixed $patterns + * @return bool + * @static + */ + public static function fullUrlIs(...$patterns) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->fullUrlIs(...$patterns); + } + /** + * Determine if the request is the result of an AJAX call. + * + * @return bool + * @static + */ + public static function ajax() + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->ajax(); + } + /** + * Determine if the request is the result of an PJAX call. + * + * @return bool + * @static + */ + public static function pjax() + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->pjax(); + } + /** + * Determine if the request is the result of an prefetch call. + * + * @return bool + * @static + */ + public static function prefetch() + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->prefetch(); + } + /** + * Determine if the request is over HTTPS. + * + * @return bool + * @static + */ + public static function secure() + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->secure(); + } + /** + * Get the client IP address. + * + * @return string|null + * @static + */ + public static function ip() + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->ip(); + } + /** + * Get the client IP addresses. + * + * @return array + * @static + */ + public static function ips() + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->ips(); + } + /** + * Get the client user agent. + * + * @return string|null + * @static + */ + public static function userAgent() + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->userAgent(); + } + /** + * Merge new input into the current request's input array. + * + * @param array $input + * @return \Illuminate\Http\Request + * @static + */ + public static function merge($input) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->merge($input); + } + /** + * Replace the input for the current request. + * + * @param array $input + * @return \Illuminate\Http\Request + * @static + */ + public static function replace($input) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->replace($input); + } + /** + * This method belongs to Symfony HttpFoundation and is not usually needed when using Laravel. + * + * Instead, you may use the "input" method. + * + * @param string $key + * @param mixed $default + * @return mixed + * @static + */ + public static function get($key, $default = null) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->get($key, $default); + } + /** + * Get the JSON payload for the request. + * + * @param string|null $key + * @param mixed $default + * @return \Symfony\Component\HttpFoundation\ParameterBag|mixed + * @static + */ + public static function json($key = null, $default = null) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->json($key, $default); + } + /** + * Create a new request instance from the given Laravel request. + * + * @param \Illuminate\Http\Request $from + * @param \Illuminate\Http\Request|null $to + * @return static + * @static + */ + public static function createFrom($from, $to = null) + { + return \Illuminate\Http\Request::createFrom($from, $to); + } + /** + * Create an Illuminate request from a Symfony instance. + * + * @param \Symfony\Component\HttpFoundation\Request $request + * @return static + * @static + */ + public static function createFromBase($request) + { + return \Illuminate\Http\Request::createFromBase($request); + } + /** + * Clones a request and overrides some of its parameters. + * + * @param array $query The GET parameters + * @param array $request The POST parameters + * @param array $attributes The request attributes (parameters parsed from the PATH_INFO, ...) + * @param array $cookies The COOKIE parameters + * @param array $files The FILES parameters + * @param array $server The SERVER parameters + * @return static + * @static + */ + public static function duplicate($query = null, $request = null, $attributes = null, $cookies = null, $files = null, $server = null) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->duplicate($query, $request, $attributes, $cookies, $files, $server); + } + /** + * Get the session associated with the request. + * + * @return \Illuminate\Session\Store + * @throws \RuntimeException + * @static + */ + public static function session() + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->session(); + } + /** + * Get the session associated with the request. + * + * @return \Illuminate\Session\Store|null + * @static + */ + public static function getSession() + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->getSession(); + } + /** + * Set the session instance on the request. + * + * @param \Illuminate\Contracts\Session\Session $session + * @return void + * @static + */ + public static function setLaravelSession($session) + { + /** @var \Illuminate\Http\Request $instance */ + $instance->setLaravelSession($session); + } + /** + * Get the user making the request. + * + * @param string|null $guard + * @return mixed + * @static + */ + public static function user($guard = null) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->user($guard); + } + /** + * Get the route handling the request. + * + * @param string|null $param + * @param mixed $default + * @return \Illuminate\Routing\Route|object|string|null + * @static + */ + public static function route($param = null, $default = null) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->route($param, $default); + } + /** + * Get a unique fingerprint for the request / route / IP address. + * + * @return string + * @throws \RuntimeException + * @static + */ + public static function fingerprint() + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->fingerprint(); + } + /** + * Set the JSON payload for the request. + * + * @param \Symfony\Component\HttpFoundation\ParameterBag $json + * @return \Illuminate\Http\Request + * @static + */ + public static function setJson($json) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->setJson($json); + } + /** + * Get the user resolver callback. + * + * @return \Closure + * @static + */ + public static function getUserResolver() + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->getUserResolver(); + } + /** + * Set the user resolver callback. + * + * @param \Closure $callback + * @return \Illuminate\Http\Request + * @static + */ + public static function setUserResolver($callback) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->setUserResolver($callback); + } + /** + * Get the route resolver callback. + * + * @return \Closure + * @static + */ + public static function getRouteResolver() + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->getRouteResolver(); + } + /** + * Set the route resolver callback. + * + * @param \Closure $callback + * @return \Illuminate\Http\Request + * @static + */ + public static function setRouteResolver($callback) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->setRouteResolver($callback); + } + /** + * Get all of the input and files for the request. + * + * @return array + * @static + */ + public static function toArray() + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->toArray(); + } + /** + * Determine if the given offset exists. + * + * @param string $offset + * @return bool + * @static + */ + public static function offsetExists($offset) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->offsetExists($offset); + } + /** + * Get the value at the given offset. + * + * @param string $offset + * @return mixed + * @static + */ + public static function offsetGet($offset) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->offsetGet($offset); + } + /** + * Set the value at the given offset. + * + * @param string $offset + * @param mixed $value + * @return void + * @static + */ + public static function offsetSet($offset, $value) + { + /** @var \Illuminate\Http\Request $instance */ + $instance->offsetSet($offset, $value); + } + /** + * Remove the value at the given offset. + * + * @param string $offset + * @return void + * @static + */ + public static function offsetUnset($offset) + { + /** @var \Illuminate\Http\Request $instance */ + $instance->offsetUnset($offset); + } + /** + * Sets the parameters for this request. + * + * This method also re-initializes all properties. + * + * @param array $query The GET parameters + * @param array $request The POST parameters + * @param array $attributes The request attributes (parameters parsed from the PATH_INFO, ...) + * @param array $cookies The COOKIE parameters + * @param array $files The FILES parameters + * @param array $server The SERVER parameters + * @param string|resource|null $content The raw body data + * @static + */ + public static function initialize($query = [], $request = [], $attributes = [], $cookies = [], $files = [], $server = [], $content = null) + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->initialize($query, $request, $attributes, $cookies, $files, $server, $content); + } + /** + * Creates a new request with values from PHP's super globals. + * + * @return static + * @static + */ + public static function createFromGlobals() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + return \Illuminate\Http\Request::createFromGlobals(); + } + /** + * Creates a Request based on a given URI and configuration. + * + * The information contained in the URI always take precedence + * over the other information (server and parameters). + * + * @param string $uri The URI + * @param string $method The HTTP method + * @param array $parameters The query (GET) or request (POST) parameters + * @param array $cookies The request cookies ($_COOKIE) + * @param array $files The request files ($_FILES) + * @param array $server The server parameters ($_SERVER) + * @param string|resource|null $content The raw body data + * @return static + * @static + */ + public static function create($uri, $method = 'GET', $parameters = [], $cookies = [], $files = [], $server = [], $content = null) + { //Method inherited from \Symfony\Component\HttpFoundation\Request + return \Illuminate\Http\Request::create($uri, $method, $parameters, $cookies, $files, $server, $content); + } + /** + * Sets a callable able to create a Request instance. + * + * This is mainly useful when you need to override the Request class + * to keep BC with an existing system. It should not be used for any + * other purpose. + * + * @static + */ + public static function setFactory($callable) + { //Method inherited from \Symfony\Component\HttpFoundation\Request + return \Illuminate\Http\Request::setFactory($callable); + } + /** + * Overrides the PHP global variables according to this request instance. + * + * It overrides $_GET, $_POST, $_REQUEST, $_SERVER, $_COOKIE. + * $_FILES is never overridden, see rfc1867 + * + * @static + */ + public static function overrideGlobals() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->overrideGlobals(); + } + /** + * Sets a list of trusted proxies. + * + * You should only list the reverse proxies that you manage directly. + * + * @param array $proxies A list of trusted proxies, the string 'REMOTE_ADDR' will be replaced with $_SERVER['REMOTE_ADDR'] + * @param int $trustedHeaderSet A bit field of Request::HEADER_*, to set which headers to trust from your proxies + * @throws \InvalidArgumentException When $trustedHeaderSet is invalid + * @static + */ + public static function setTrustedProxies($proxies, $trustedHeaderSet) + { //Method inherited from \Symfony\Component\HttpFoundation\Request + return \Illuminate\Http\Request::setTrustedProxies($proxies, $trustedHeaderSet); + } + /** + * Gets the list of trusted proxies. + * + * @return array An array of trusted proxies + * @static + */ + public static function getTrustedProxies() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + return \Illuminate\Http\Request::getTrustedProxies(); + } + /** + * Gets the set of trusted headers from trusted proxies. + * + * @return int A bit field of Request::HEADER_* that defines which headers are trusted from your proxies + * @static + */ + public static function getTrustedHeaderSet() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + return \Illuminate\Http\Request::getTrustedHeaderSet(); + } + /** + * Sets a list of trusted host patterns. + * + * You should only list the hosts you manage using regexs. + * + * @param array $hostPatterns A list of trusted host patterns + * @static + */ + public static function setTrustedHosts($hostPatterns) + { //Method inherited from \Symfony\Component\HttpFoundation\Request + return \Illuminate\Http\Request::setTrustedHosts($hostPatterns); + } + /** + * Gets the list of trusted host patterns. + * + * @return array An array of trusted host patterns + * @static + */ + public static function getTrustedHosts() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + return \Illuminate\Http\Request::getTrustedHosts(); + } + /** + * Normalizes a query string. + * + * It builds a normalized query string, where keys/value pairs are alphabetized, + * have consistent escaping and unneeded delimiters are removed. + * + * @return string A normalized query string for the Request + * @static + */ + public static function normalizeQueryString($qs) + { //Method inherited from \Symfony\Component\HttpFoundation\Request + return \Illuminate\Http\Request::normalizeQueryString($qs); + } + /** + * Enables support for the _method request parameter to determine the intended HTTP method. + * + * Be warned that enabling this feature might lead to CSRF issues in your code. + * Check that you are using CSRF tokens when required. + * If the HTTP method parameter override is enabled, an html-form with method "POST" can be altered + * and used to send a "PUT" or "DELETE" request via the _method request parameter. + * If these methods are not protected against CSRF, this presents a possible vulnerability. + * + * The HTTP method can only be overridden when the real HTTP method is POST. + * + * @static + */ + public static function enableHttpMethodParameterOverride() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + return \Illuminate\Http\Request::enableHttpMethodParameterOverride(); + } + /** + * Checks whether support for the _method request parameter is enabled. + * + * @return bool True when the _method request parameter is enabled, false otherwise + * @static + */ + public static function getHttpMethodParameterOverride() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + return \Illuminate\Http\Request::getHttpMethodParameterOverride(); + } + /** + * Whether the request contains a Session which was started in one of the + * previous requests. + * + * @return bool + * @static + */ + public static function hasPreviousSession() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->hasPreviousSession(); + } + /** + * Whether the request contains a Session object. + * + * This method does not give any information about the state of the session object, + * like whether the session is started or not. It is just a way to check if this Request + * is associated with a Session instance. + * + * @return bool true when the Request contains a Session object, false otherwise + * @static + */ + public static function hasSession() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->hasSession(); + } + /** + * + * + * @static + */ + public static function setSession($session) + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->setSession($session); + } + /** + * + * + * @internal + * @static + */ + public static function setSessionFactory($factory) + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->setSessionFactory($factory); + } + /** + * Returns the client IP addresses. + * + * In the returned array the most trusted IP address is first, and the + * least trusted one last. The "real" client IP address is the last one, + * but this is also the least trusted one. Trusted proxies are stripped. + * + * Use this method carefully; you should use getClientIp() instead. + * + * @return array The client IP addresses + * @see getClientIp() + * @static + */ + public static function getClientIps() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getClientIps(); + } + /** + * Returns the client IP address. + * + * This method can read the client IP address from the "X-Forwarded-For" header + * when trusted proxies were set via "setTrustedProxies()". The "X-Forwarded-For" + * header value is a comma+space separated list of IP addresses, the left-most + * being the original client, and each successive proxy that passed the request + * adding the IP address where it received the request from. + * + * If your reverse proxy uses a different header name than "X-Forwarded-For", + * ("Client-Ip" for instance), configure it via the $trustedHeaderSet + * argument of the Request::setTrustedProxies() method instead. + * + * @return string|null The client IP address + * @see getClientIps() + * @see https://wikipedia.org/wiki/X-Forwarded-For + * @static + */ + public static function getClientIp() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getClientIp(); + } + /** + * Returns current script name. + * + * @return string + * @static + */ + public static function getScriptName() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getScriptName(); + } + /** + * Returns the path being requested relative to the executed script. + * + * The path info always starts with a /. + * + * Suppose this request is instantiated from /mysite on localhost: + * + * * http://localhost/mysite returns an empty string + * * http://localhost/mysite/about returns '/about' + * * http://localhost/mysite/enco%20ded returns '/enco%20ded' + * * http://localhost/mysite/about?var=1 returns '/about' + * + * @return string The raw path (i.e. not urldecoded) + * @static + */ + public static function getPathInfo() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getPathInfo(); + } + /** + * Returns the root path from which this request is executed. + * + * Suppose that an index.php file instantiates this request object: + * + * * http://localhost/index.php returns an empty string + * * http://localhost/index.php/page returns an empty string + * * http://localhost/web/index.php returns '/web' + * * http://localhost/we%20b/index.php returns '/we%20b' + * + * @return string The raw path (i.e. not urldecoded) + * @static + */ + public static function getBasePath() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getBasePath(); + } + /** + * Returns the root URL from which this request is executed. + * + * The base URL never ends with a /. + * + * This is similar to getBasePath(), except that it also includes the + * script filename (e.g. index.php) if one exists. + * + * @return string The raw URL (i.e. not urldecoded) + * @static + */ + public static function getBaseUrl() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getBaseUrl(); + } + /** + * Gets the request's scheme. + * + * @return string + * @static + */ + public static function getScheme() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getScheme(); + } + /** + * Returns the port on which the request is made. + * + * This method can read the client port from the "X-Forwarded-Port" header + * when trusted proxies were set via "setTrustedProxies()". + * + * The "X-Forwarded-Port" header must contain the client port. + * + * @return int|string can be a string if fetched from the server bag + * @static + */ + public static function getPort() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getPort(); + } + /** + * Returns the user. + * + * @return string|null + * @static + */ + public static function getUser() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getUser(); + } + /** + * Returns the password. + * + * @return string|null + * @static + */ + public static function getPassword() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getPassword(); + } + /** + * Gets the user info. + * + * @return string A user name and, optionally, scheme-specific information about how to gain authorization to access the server + * @static + */ + public static function getUserInfo() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getUserInfo(); + } + /** + * Returns the HTTP host being requested. + * + * The port name will be appended to the host if it's non-standard. + * + * @return string + * @static + */ + public static function getHttpHost() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getHttpHost(); + } + /** + * Returns the requested URI (path and query string). + * + * @return string The raw URI (i.e. not URI decoded) + * @static + */ + public static function getRequestUri() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getRequestUri(); + } + /** + * Gets the scheme and HTTP host. + * + * If the URL was called with basic authentication, the user + * and the password are not added to the generated string. + * + * @return string The scheme and HTTP host + * @static + */ + public static function getSchemeAndHttpHost() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getSchemeAndHttpHost(); + } + /** + * Generates a normalized URI (URL) for the Request. + * + * @return string A normalized URI (URL) for the Request + * @see getQueryString() + * @static + */ + public static function getUri() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getUri(); + } + /** + * Generates a normalized URI for the given path. + * + * @param string $path A path to use instead of the current one + * @return string The normalized URI for the path + * @static + */ + public static function getUriForPath($path) + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getUriForPath($path); + } + /** + * Returns the path as relative reference from the current Request path. + * + * Only the URIs path component (no schema, host etc.) is relevant and must be given. + * Both paths must be absolute and not contain relative parts. + * Relative URLs from one resource to another are useful when generating self-contained downloadable document archives. + * Furthermore, they can be used to reduce the link size in documents. + * + * Example target paths, given a base path of "/a/b/c/d": + * - "/a/b/c/d" -> "" + * - "/a/b/c/" -> "./" + * - "/a/b/" -> "../" + * - "/a/b/c/other" -> "other" + * - "/a/x/y" -> "../../x/y" + * + * @return string The relative target path + * @static + */ + public static function getRelativeUriForPath($path) + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getRelativeUriForPath($path); + } + /** + * Generates the normalized query string for the Request. + * + * It builds a normalized query string, where keys/value pairs are alphabetized + * and have consistent escaping. + * + * @return string|null A normalized query string for the Request + * @static + */ + public static function getQueryString() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getQueryString(); + } + /** + * Checks whether the request is secure or not. + * + * This method can read the client protocol from the "X-Forwarded-Proto" header + * when trusted proxies were set via "setTrustedProxies()". + * + * The "X-Forwarded-Proto" header must contain the protocol: "https" or "http". + * + * @return bool + * @static + */ + public static function isSecure() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->isSecure(); + } + /** + * Returns the host name. + * + * This method can read the client host name from the "X-Forwarded-Host" header + * when trusted proxies were set via "setTrustedProxies()". + * + * The "X-Forwarded-Host" header must contain the client host name. + * + * @return string + * @throws SuspiciousOperationException when the host name is invalid or not trusted + * @static + */ + public static function getHost() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getHost(); + } + /** + * Sets the request method. + * + * @static + */ + public static function setMethod($method) + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->setMethod($method); + } + /** + * Gets the request "intended" method. + * + * If the X-HTTP-Method-Override header is set, and if the method is a POST, + * then it is used to determine the "real" intended HTTP method. + * + * The _method request parameter can also be used to determine the HTTP method, + * but only if enableHttpMethodParameterOverride() has been called. + * + * The method is always an uppercased string. + * + * @return string The request method + * @see getRealMethod() + * @static + */ + public static function getMethod() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getMethod(); + } + /** + * Gets the "real" request method. + * + * @return string The request method + * @see getMethod() + * @static + */ + public static function getRealMethod() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getRealMethod(); + } + /** + * Gets the mime type associated with the format. + * + * @return string|null The associated mime type (null if not found) + * @static + */ + public static function getMimeType($format) + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getMimeType($format); + } + /** + * Gets the mime types associated with the format. + * + * @return array The associated mime types + * @static + */ + public static function getMimeTypes($format) + { //Method inherited from \Symfony\Component\HttpFoundation\Request + return \Illuminate\Http\Request::getMimeTypes($format); + } + /** + * Gets the format associated with the mime type. + * + * @return string|null The format (null if not found) + * @static + */ + public static function getFormat($mimeType) + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getFormat($mimeType); + } + /** + * Associates a format with mime types. + * + * @param string|array $mimeTypes The associated mime types (the preferred one must be the first as it will be used as the content type) + * @static + */ + public static function setFormat($format, $mimeTypes) + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->setFormat($format, $mimeTypes); + } + /** + * Gets the request format. + * + * Here is the process to determine the format: + * + * * format defined by the user (with setRequestFormat()) + * * _format request attribute + * * $default + * + * @see getPreferredFormat + * @return string|null The request format + * @static + */ + public static function getRequestFormat($default = 'html') + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getRequestFormat($default); + } + /** + * Sets the request format. + * + * @static + */ + public static function setRequestFormat($format) + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->setRequestFormat($format); + } + /** + * Gets the format associated with the request. + * + * @return string|null The format (null if no content type is present) + * @static + */ + public static function getContentType() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getContentType(); + } + /** + * Sets the default locale. + * + * @static + */ + public static function setDefaultLocale($locale) + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->setDefaultLocale($locale); + } + /** + * Get the default locale. + * + * @return string + * @static + */ + public static function getDefaultLocale() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getDefaultLocale(); + } + /** + * Sets the locale. + * + * @static + */ + public static function setLocale($locale) + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->setLocale($locale); + } + /** + * Get the locale. + * + * @return string + * @static + */ + public static function getLocale() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getLocale(); + } + /** + * Checks if the request method is of specified type. + * + * @param string $method Uppercase request method (GET, POST etc) + * @return bool + * @static + */ + public static function isMethod($method) + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->isMethod($method); + } + /** + * Checks whether or not the method is safe. + * + * @see https://tools.ietf.org/html/rfc7231#section-4.2.1 + * @return bool + * @static + */ + public static function isMethodSafe() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->isMethodSafe(); + } + /** + * Checks whether or not the method is idempotent. + * + * @return bool + * @static + */ + public static function isMethodIdempotent() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->isMethodIdempotent(); + } + /** + * Checks whether the method is cacheable or not. + * + * @see https://tools.ietf.org/html/rfc7231#section-4.2.3 + * @return bool True for GET and HEAD, false otherwise + * @static + */ + public static function isMethodCacheable() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->isMethodCacheable(); + } + /** + * Returns the protocol version. + * + * If the application is behind a proxy, the protocol version used in the + * requests between the client and the proxy and between the proxy and the + * server might be different. This returns the former (from the "Via" header) + * if the proxy is trusted (see "setTrustedProxies()"), otherwise it returns + * the latter (from the "SERVER_PROTOCOL" server parameter). + * + * @return string + * @static + */ + public static function getProtocolVersion() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getProtocolVersion(); + } + /** + * Returns the request body content. + * + * @param bool $asResource If true, a resource will be returned + * @return string|resource The request body content or a resource to read the body stream + * @throws \LogicException + * @static + */ + public static function getContent($asResource = false) + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getContent($asResource); + } + /** + * Gets the Etags. + * + * @return array The entity tags + * @static + */ + public static function getETags() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getETags(); + } + /** + * + * + * @return bool + * @static + */ + public static function isNoCache() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->isNoCache(); + } + /** + * Gets the preferred format for the response by inspecting, in the following order: + * * the request format set using setRequestFormat; + * * the values of the Accept HTTP header. + * + * Note that if you use this method, you should send the "Vary: Accept" header + * in the response to prevent any issues with intermediary HTTP caches. + * + * @static + */ + public static function getPreferredFormat($default = 'html') + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getPreferredFormat($default); + } + /** + * Returns the preferred language. + * + * @param string[] $locales An array of ordered available locales + * @return string|null The preferred locale + * @static + */ + public static function getPreferredLanguage($locales = null) + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getPreferredLanguage($locales); + } + /** + * Gets a list of languages acceptable by the client browser. + * + * @return array Languages ordered in the user browser preferences + * @static + */ + public static function getLanguages() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getLanguages(); + } + /** + * Gets a list of charsets acceptable by the client browser. + * + * @return array List of charsets in preferable order + * @static + */ + public static function getCharsets() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getCharsets(); + } + /** + * Gets a list of encodings acceptable by the client browser. + * + * @return array List of encodings in preferable order + * @static + */ + public static function getEncodings() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getEncodings(); + } + /** + * Gets a list of content types acceptable by the client browser. + * + * @return array List of content types in preferable order + * @static + */ + public static function getAcceptableContentTypes() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->getAcceptableContentTypes(); + } + /** + * Returns true if the request is a XMLHttpRequest. + * + * It works if your JavaScript library sets an X-Requested-With HTTP header. + * It is known to work with common JavaScript frameworks: + * + * @see https://wikipedia.org/wiki/List_of_Ajax_frameworks#JavaScript + * @return bool true if the request is an XMLHttpRequest, false otherwise + * @static + */ + public static function isXmlHttpRequest() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->isXmlHttpRequest(); + } + /** + * Checks whether the client browser prefers safe content or not according to RFC8674. + * + * @see https://tools.ietf.org/html/rfc8674 + * @static + */ + public static function preferSafeContent() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->preferSafeContent(); + } + /** + * Indicates whether this request originated from a trusted proxy. + * + * This can be useful to determine whether or not to trust the + * contents of a proxy-specific header. + * + * @return bool true if the request came from a trusted proxy, false otherwise + * @static + */ + public static function isFromTrustedProxy() + { //Method inherited from \Symfony\Component\HttpFoundation\Request + /** @var \Illuminate\Http\Request $instance */ + return $instance->isFromTrustedProxy(); + } + /** + * Determine if the given content types match. + * + * @param string $actual + * @param string $type + * @return bool + * @static + */ + public static function matchesType($actual, $type) + { + return \Illuminate\Http\Request::matchesType($actual, $type); + } + /** + * Determine if the request is sending JSON. + * + * @return bool + * @static + */ + public static function isJson() + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->isJson(); + } + /** + * Determine if the current request probably expects a JSON response. + * + * @return bool + * @static + */ + public static function expectsJson() + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->expectsJson(); + } + /** + * Determine if the current request is asking for JSON. + * + * @return bool + * @static + */ + public static function wantsJson() + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->wantsJson(); + } + /** + * Determines whether the current requests accepts a given content type. + * + * @param string|array $contentTypes + * @return bool + * @static + */ + public static function accepts($contentTypes) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->accepts($contentTypes); + } + /** + * Return the most suitable content type from the given array based on content negotiation. + * + * @param string|array $contentTypes + * @return string|null + * @static + */ + public static function prefers($contentTypes) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->prefers($contentTypes); + } + /** + * Determine if the current request accepts any content type. + * + * @return bool + * @static + */ + public static function acceptsAnyContentType() + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->acceptsAnyContentType(); + } + /** + * Determines whether a request accepts JSON. + * + * @return bool + * @static + */ + public static function acceptsJson() + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->acceptsJson(); + } + /** + * Determines whether a request accepts HTML. + * + * @return bool + * @static + */ + public static function acceptsHtml() + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->acceptsHtml(); + } + /** + * Get the data format expected in the response. + * + * @param string $default + * @return string + * @static + */ + public static function format($default = 'html') + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->format($default); + } + /** + * Retrieve an old input item. + * + * @param string|null $key + * @param string|array|null $default + * @return string|array + * @static + */ + public static function old($key = null, $default = null) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->old($key, $default); + } + /** + * Flash the input for the current request to the session. + * + * @return void + * @static + */ + public static function flash() + { + /** @var \Illuminate\Http\Request $instance */ + $instance->flash(); + } + /** + * Flash only some of the input to the session. + * + * @param array|mixed $keys + * @return void + * @static + */ + public static function flashOnly($keys) + { + /** @var \Illuminate\Http\Request $instance */ + $instance->flashOnly($keys); + } + /** + * Flash only some of the input to the session. + * + * @param array|mixed $keys + * @return void + * @static + */ + public static function flashExcept($keys) + { + /** @var \Illuminate\Http\Request $instance */ + $instance->flashExcept($keys); + } + /** + * Flush all of the old input from the session. + * + * @return void + * @static + */ + public static function flush() + { + /** @var \Illuminate\Http\Request $instance */ + $instance->flush(); + } + /** + * Retrieve a server variable from the request. + * + * @param string|null $key + * @param string|array|null $default + * @return string|array|null + * @static + */ + public static function server($key = null, $default = null) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->server($key, $default); + } + /** + * Determine if a header is set on the request. + * + * @param string $key + * @return bool + * @static + */ + public static function hasHeader($key) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->hasHeader($key); + } + /** + * Retrieve a header from the request. + * + * @param string|null $key + * @param string|array|null $default + * @return string|array|null + * @static + */ + public static function header($key = null, $default = null) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->header($key, $default); + } + /** + * Get the bearer token from the request headers. + * + * @return string|null + * @static + */ + public static function bearerToken() + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->bearerToken(); + } + /** + * Determine if the request contains a given input item key. + * + * @param string|array $key + * @return bool + * @static + */ + public static function exists($key) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->exists($key); + } + /** + * Determine if the request contains a given input item key. + * + * @param string|array $key + * @return bool + * @static + */ + public static function has($key) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->has($key); + } + /** + * Determine if the request contains any of the given inputs. + * + * @param string|array $keys + * @return bool + * @static + */ + public static function hasAny($keys) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->hasAny($keys); + } + /** + * Apply the callback if the request contains the given input item key. + * + * @param string $key + * @param callable $callback + * @return $this|mixed + * @static + */ + public static function whenHas($key, $callback) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->whenHas($key, $callback); + } + /** + * Determine if the request contains a non-empty value for an input item. + * + * @param string|array $key + * @return bool + * @static + */ + public static function filled($key) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->filled($key); + } + /** + * Determine if the request contains an empty value for an input item. + * + * @param string|array $key + * @return bool + * @static + */ + public static function isNotFilled($key) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->isNotFilled($key); + } + /** + * Determine if the request contains a non-empty value for any of the given inputs. + * + * @param string|array $keys + * @return bool + * @static + */ + public static function anyFilled($keys) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->anyFilled($keys); + } + /** + * Apply the callback if the request contains a non-empty value for the given input item key. + * + * @param string $key + * @param callable $callback + * @return $this|mixed + * @static + */ + public static function whenFilled($key, $callback) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->whenFilled($key, $callback); + } + /** + * Determine if the request is missing a given input item key. + * + * @param string|array $key + * @return bool + * @static + */ + public static function missing($key) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->missing($key); + } + /** + * Get the keys for all of the input and files. + * + * @return array + * @static + */ + public static function keys() + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->keys(); + } + /** + * Get all of the input and files for the request. + * + * @param array|mixed|null $keys + * @return array + * @static + */ + public static function all($keys = null) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->all($keys); + } + /** + * Retrieve an input item from the request. + * + * @param string|null $key + * @param mixed $default + * @return mixed + * @static + */ + public static function input($key = null, $default = null) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->input($key, $default); + } + /** + * Retrieve input as a boolean value. + * + * Returns true when value is "1", "true", "on", and "yes". Otherwise, returns false. + * + * @param string|null $key + * @param bool $default + * @return bool + * @static + */ + public static function boolean($key = null, $default = false) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->boolean($key, $default); + } + /** + * Get a subset containing the provided keys with values from the input data. + * + * @param array|mixed $keys + * @return array + * @static + */ + public static function only($keys) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->only($keys); + } + /** + * Get all of the input except for a specified array of items. + * + * @param array|mixed $keys + * @return array + * @static + */ + public static function except($keys) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->except($keys); + } + /** + * Retrieve a query string item from the request. + * + * @param string|null $key + * @param string|array|null $default + * @return string|array|null + * @static + */ + public static function query($key = null, $default = null) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->query($key, $default); + } + /** + * Retrieve a request payload item from the request. + * + * @param string|null $key + * @param string|array|null $default + * @return string|array|null + * @static + */ + public static function post($key = null, $default = null) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->post($key, $default); + } + /** + * Determine if a cookie is set on the request. + * + * @param string $key + * @return bool + * @static + */ + public static function hasCookie($key) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->hasCookie($key); + } + /** + * Retrieve a cookie from the request. + * + * @param string|null $key + * @param string|array|null $default + * @return string|array|null + * @static + */ + public static function cookie($key = null, $default = null) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->cookie($key, $default); + } + /** + * Get an array of all of the files on the request. + * + * @return array + * @static + */ + public static function allFiles() + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->allFiles(); + } + /** + * Determine if the uploaded data contains a file. + * + * @param string $key + * @return bool + * @static + */ + public static function hasFile($key) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->hasFile($key); + } + /** + * Retrieve a file from the request. + * + * @param string|null $key + * @param mixed $default + * @return \Illuminate\Http\UploadedFile|\Illuminate\Http\UploadedFile[]|array|null + * @static + */ + public static function file($key = null, $default = null) + { + /** @var \Illuminate\Http\Request $instance */ + return $instance->file($key, $default); + } + /** + * Register a custom macro. + * + * @param string $name + * @param object|callable $macro + * @return void + * @static + */ + public static function macro($name, $macro) + { + \Illuminate\Http\Request::macro($name, $macro); + } + /** + * Mix another object into the class. + * + * @param object $mixin + * @param bool $replace + * @return void + * @throws \ReflectionException + * @static + */ + public static function mixin($mixin, $replace = true) + { + \Illuminate\Http\Request::mixin($mixin, $replace); + } + /** + * Checks if macro is registered. + * + * @param string $name + * @return bool + * @static + */ + public static function hasMacro($name) + { + return \Illuminate\Http\Request::hasMacro($name); + } + /** + * + * + * @param array $rules + * @param mixed $params + * @static + */ + public static function validate($rules, ...$params) + { + return \Illuminate\Http\Request::validate($rules, ...$params); + } + /** + * + * + * @param string $errorBag + * @param array $rules + * @param mixed $params + * @static + */ + public static function validateWithBag($errorBag, $rules, ...$params) + { + return \Illuminate\Http\Request::validateWithBag($errorBag, $rules, ...$params); + } + /** + * + * + * @param mixed $absolute + * @static + */ + public static function hasValidSignature($absolute = true) + { + return \Illuminate\Http\Request::hasValidSignature($absolute); + } + + } + /** + * + * + * @see \Illuminate\Contracts\Routing\ResponseFactory + */ + class Response { + /** + * Create a new response instance. + * + * @param string $content + * @param int $status + * @param array $headers + * @return \Illuminate\Http\Response + * @static + */ + public static function make($content = '', $status = 200, $headers = []) + { + /** @var \Illuminate\Routing\ResponseFactory $instance */ + return $instance->make($content, $status, $headers); + } + /** + * Create a new "no content" response. + * + * @param int $status + * @param array $headers + * @return \Illuminate\Http\Response + * @static + */ + public static function noContent($status = 204, $headers = []) + { + /** @var \Illuminate\Routing\ResponseFactory $instance */ + return $instance->noContent($status, $headers); + } + /** + * Create a new response for a given view. + * + * @param string|array $view + * @param array $data + * @param int $status + * @param array $headers + * @return \Illuminate\Http\Response + * @static + */ + public static function view($view, $data = [], $status = 200, $headers = []) + { + /** @var \Illuminate\Routing\ResponseFactory $instance */ + return $instance->view($view, $data, $status, $headers); + } + /** + * Create a new JSON response instance. + * + * @param mixed $data + * @param int $status + * @param array $headers + * @param int $options + * @return \Illuminate\Http\JsonResponse + * @static + */ + public static function json($data = [], $status = 200, $headers = [], $options = 0) + { + /** @var \Illuminate\Routing\ResponseFactory $instance */ + return $instance->json($data, $status, $headers, $options); + } + /** + * Create a new JSONP response instance. + * + * @param string $callback + * @param mixed $data + * @param int $status + * @param array $headers + * @param int $options + * @return \Illuminate\Http\JsonResponse + * @static + */ + public static function jsonp($callback, $data = [], $status = 200, $headers = [], $options = 0) + { + /** @var \Illuminate\Routing\ResponseFactory $instance */ + return $instance->jsonp($callback, $data, $status, $headers, $options); + } + /** + * Create a new streamed response instance. + * + * @param \Closure $callback + * @param int $status + * @param array $headers + * @return \Symfony\Component\HttpFoundation\StreamedResponse + * @static + */ + public static function stream($callback, $status = 200, $headers = []) + { + /** @var \Illuminate\Routing\ResponseFactory $instance */ + return $instance->stream($callback, $status, $headers); + } + /** + * Create a new streamed response instance as a file download. + * + * @param \Closure $callback + * @param string|null $name + * @param array $headers + * @param string|null $disposition + * @return \Symfony\Component\HttpFoundation\StreamedResponse + * @static + */ + public static function streamDownload($callback, $name = null, $headers = [], $disposition = 'attachment') + { + /** @var \Illuminate\Routing\ResponseFactory $instance */ + return $instance->streamDownload($callback, $name, $headers, $disposition); + } + /** + * Create a new file download response. + * + * @param \SplFileInfo|string $file + * @param string|null $name + * @param array $headers + * @param string|null $disposition + * @return \Symfony\Component\HttpFoundation\BinaryFileResponse + * @static + */ + public static function download($file, $name = null, $headers = [], $disposition = 'attachment') + { + /** @var \Illuminate\Routing\ResponseFactory $instance */ + return $instance->download($file, $name, $headers, $disposition); + } + /** + * Return the raw contents of a binary file. + * + * @param \SplFileInfo|string $file + * @param array $headers + * @return \Symfony\Component\HttpFoundation\BinaryFileResponse + * @static + */ + public static function file($file, $headers = []) + { + /** @var \Illuminate\Routing\ResponseFactory $instance */ + return $instance->file($file, $headers); + } + /** + * Create a new redirect response to the given path. + * + * @param string $path + * @param int $status + * @param array $headers + * @param bool|null $secure + * @return \Illuminate\Http\RedirectResponse + * @static + */ + public static function redirectTo($path, $status = 302, $headers = [], $secure = null) + { + /** @var \Illuminate\Routing\ResponseFactory $instance */ + return $instance->redirectTo($path, $status, $headers, $secure); + } + /** + * Create a new redirect response to a named route. + * + * @param string $route + * @param mixed $parameters + * @param int $status + * @param array $headers + * @return \Illuminate\Http\RedirectResponse + * @static + */ + public static function redirectToRoute($route, $parameters = [], $status = 302, $headers = []) + { + /** @var \Illuminate\Routing\ResponseFactory $instance */ + return $instance->redirectToRoute($route, $parameters, $status, $headers); + } + /** + * Create a new redirect response to a controller action. + * + * @param string $action + * @param mixed $parameters + * @param int $status + * @param array $headers + * @return \Illuminate\Http\RedirectResponse + * @static + */ + public static function redirectToAction($action, $parameters = [], $status = 302, $headers = []) + { + /** @var \Illuminate\Routing\ResponseFactory $instance */ + return $instance->redirectToAction($action, $parameters, $status, $headers); + } + /** + * Create a new redirect response, while putting the current URL in the session. + * + * @param string $path + * @param int $status + * @param array $headers + * @param bool|null $secure + * @return \Illuminate\Http\RedirectResponse + * @static + */ + public static function redirectGuest($path, $status = 302, $headers = [], $secure = null) + { + /** @var \Illuminate\Routing\ResponseFactory $instance */ + return $instance->redirectGuest($path, $status, $headers, $secure); + } + /** + * Create a new redirect response to the previously intended location. + * + * @param string $default + * @param int $status + * @param array $headers + * @param bool|null $secure + * @return \Illuminate\Http\RedirectResponse + * @static + */ + public static function redirectToIntended($default = '/', $status = 302, $headers = [], $secure = null) + { + /** @var \Illuminate\Routing\ResponseFactory $instance */ + return $instance->redirectToIntended($default, $status, $headers, $secure); + } + /** + * Register a custom macro. + * + * @param string $name + * @param object|callable $macro + * @return void + * @static + */ + public static function macro($name, $macro) + { + \Illuminate\Routing\ResponseFactory::macro($name, $macro); + } + /** + * Mix another object into the class. + * + * @param object $mixin + * @param bool $replace + * @return void + * @throws \ReflectionException + * @static + */ + public static function mixin($mixin, $replace = true) + { + \Illuminate\Routing\ResponseFactory::mixin($mixin, $replace); + } + /** + * Checks if macro is registered. + * + * @param string $name + * @return bool + * @static + */ + public static function hasMacro($name) + { + return \Illuminate\Routing\ResponseFactory::hasMacro($name); + } + + } + /** + * + * + * @method static \Illuminate\Routing\RouteRegistrar as(string $value) + * @method static \Illuminate\Routing\RouteRegistrar domain(string $value) + * @method static \Illuminate\Routing\RouteRegistrar middleware(array|string|null $middleware) + * @method static \Illuminate\Routing\RouteRegistrar name(string $value) + * @method static \Illuminate\Routing\RouteRegistrar namespace(string $value) + * @method static \Illuminate\Routing\RouteRegistrar prefix(string $prefix) + * @method static \Illuminate\Routing\RouteRegistrar where(array $where) + * @see \Illuminate\Routing\Router + */ + class Route { + /** + * Register a new GET route with the router. + * + * @param string $uri + * @param array|string|callable|null $action + * @return \Illuminate\Routing\Route + * @static + */ + public static function get($uri, $action = null) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->get($uri, $action); + } + /** + * Register a new POST route with the router. + * + * @param string $uri + * @param array|string|callable|null $action + * @return \Illuminate\Routing\Route + * @static + */ + public static function post($uri, $action = null) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->post($uri, $action); + } + /** + * Register a new PUT route with the router. + * + * @param string $uri + * @param array|string|callable|null $action + * @return \Illuminate\Routing\Route + * @static + */ + public static function put($uri, $action = null) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->put($uri, $action); + } + /** + * Register a new PATCH route with the router. + * + * @param string $uri + * @param array|string|callable|null $action + * @return \Illuminate\Routing\Route + * @static + */ + public static function patch($uri, $action = null) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->patch($uri, $action); + } + /** + * Register a new DELETE route with the router. + * + * @param string $uri + * @param array|string|callable|null $action + * @return \Illuminate\Routing\Route + * @static + */ + public static function delete($uri, $action = null) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->delete($uri, $action); + } + /** + * Register a new OPTIONS route with the router. + * + * @param string $uri + * @param array|string|callable|null $action + * @return \Illuminate\Routing\Route + * @static + */ + public static function options($uri, $action = null) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->options($uri, $action); + } + /** + * Register a new route responding to all verbs. + * + * @param string $uri + * @param array|string|callable|null $action + * @return \Illuminate\Routing\Route + * @static + */ + public static function any($uri, $action = null) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->any($uri, $action); + } + /** + * Register a new Fallback route with the router. + * + * @param array|string|callable|null $action + * @return \Illuminate\Routing\Route + * @static + */ + public static function fallback($action) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->fallback($action); + } + /** + * Create a redirect from one URI to another. + * + * @param string $uri + * @param string $destination + * @param int $status + * @return \Illuminate\Routing\Route + * @static + */ + public static function redirect($uri, $destination, $status = 302) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->redirect($uri, $destination, $status); + } + /** + * Create a permanent redirect from one URI to another. + * + * @param string $uri + * @param string $destination + * @return \Illuminate\Routing\Route + * @static + */ + public static function permanentRedirect($uri, $destination) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->permanentRedirect($uri, $destination); + } + /** + * Register a new route that returns a view. + * + * @param string $uri + * @param string $view + * @param array $data + * @return \Illuminate\Routing\Route + * @static + */ + public static function view($uri, $view, $data = []) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->view($uri, $view, $data); + } + /** + * Register a new route with the given verbs. + * + * @param array|string $methods + * @param string $uri + * @param array|string|callable|null $action + * @return \Illuminate\Routing\Route + * @static + */ + public static function match($methods, $uri, $action = null) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->match($methods, $uri, $action); + } + /** + * Register an array of resource controllers. + * + * @param array $resources + * @param array $options + * @return void + * @static + */ + public static function resources($resources, $options = []) + { + /** @var \Illuminate\Routing\Router $instance */ + $instance->resources($resources, $options); + } + /** + * Route a resource to a controller. + * + * @param string $name + * @param string $controller + * @param array $options + * @return \Illuminate\Routing\PendingResourceRegistration + * @static + */ + public static function resource($name, $controller, $options = []) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->resource($name, $controller, $options); + } + /** + * Register an array of API resource controllers. + * + * @param array $resources + * @param array $options + * @return void + * @static + */ + public static function apiResources($resources, $options = []) + { + /** @var \Illuminate\Routing\Router $instance */ + $instance->apiResources($resources, $options); + } + /** + * Route an API resource to a controller. + * + * @param string $name + * @param string $controller + * @param array $options + * @return \Illuminate\Routing\PendingResourceRegistration + * @static + */ + public static function apiResource($name, $controller, $options = []) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->apiResource($name, $controller, $options); + } + /** + * Create a route group with shared attributes. + * + * @param array $attributes + * @param \Closure|string $routes + * @return void + * @static + */ + public static function group($attributes, $routes) + { + /** @var \Illuminate\Routing\Router $instance */ + $instance->group($attributes, $routes); + } + /** + * Merge the given array with the last group stack. + * + * @param array $new + * @param bool $prependExistingPrefix + * @return array + * @static + */ + public static function mergeWithLastGroup($new, $prependExistingPrefix = true) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->mergeWithLastGroup($new, $prependExistingPrefix); + } + /** + * Get the prefix from the last group on the stack. + * + * @return string + * @static + */ + public static function getLastGroupPrefix() + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->getLastGroupPrefix(); + } + /** + * Add a route to the underlying route collection. + * + * @param array|string $methods + * @param string $uri + * @param array|string|callable|null $action + * @return \Illuminate\Routing\Route + * @static + */ + public static function addRoute($methods, $uri, $action) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->addRoute($methods, $uri, $action); + } + /** + * Create a new Route object. + * + * @param array|string $methods + * @param string $uri + * @param mixed $action + * @return \Illuminate\Routing\Route + * @static + */ + public static function newRoute($methods, $uri, $action) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->newRoute($methods, $uri, $action); + } + /** + * Return the response returned by the given route. + * + * @param string $name + * @return \Symfony\Component\HttpFoundation\Response + * @static + */ + public static function respondWithRoute($name) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->respondWithRoute($name); + } + /** + * Dispatch the request to the application. + * + * @param \Illuminate\Http\Request $request + * @return \Symfony\Component\HttpFoundation\Response + * @static + */ + public static function dispatch($request) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->dispatch($request); + } + /** + * Dispatch the request to a route and return the response. + * + * @param \Illuminate\Http\Request $request + * @return \Symfony\Component\HttpFoundation\Response + * @static + */ + public static function dispatchToRoute($request) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->dispatchToRoute($request); + } + /** + * Gather the middleware for the given route with resolved class names. + * + * @param \Illuminate\Routing\Route $route + * @return array + * @static + */ + public static function gatherRouteMiddleware($route) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->gatherRouteMiddleware($route); + } + /** + * Create a response instance from the given value. + * + * @param \Symfony\Component\HttpFoundation\Request $request + * @param mixed $response + * @return \Symfony\Component\HttpFoundation\Response + * @static + */ + public static function prepareResponse($request, $response) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->prepareResponse($request, $response); + } + /** + * Static version of prepareResponse. + * + * @param \Symfony\Component\HttpFoundation\Request $request + * @param mixed $response + * @return \Symfony\Component\HttpFoundation\Response + * @static + */ + public static function toResponse($request, $response) + { + return \Illuminate\Routing\Router::toResponse($request, $response); + } + /** + * Substitute the route bindings onto the route. + * + * @param \Illuminate\Routing\Route $route + * @return \Illuminate\Routing\Route + * @throws \Illuminate\Database\Eloquent\ModelNotFoundException + * @static + */ + public static function substituteBindings($route) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->substituteBindings($route); + } + /** + * Substitute the implicit Eloquent model bindings for the route. + * + * @param \Illuminate\Routing\Route $route + * @return void + * @throws \Illuminate\Database\Eloquent\ModelNotFoundException + * @static + */ + public static function substituteImplicitBindings($route) + { + /** @var \Illuminate\Routing\Router $instance */ + $instance->substituteImplicitBindings($route); + } + /** + * Register a route matched event listener. + * + * @param string|callable $callback + * @return void + * @static + */ + public static function matched($callback) + { + /** @var \Illuminate\Routing\Router $instance */ + $instance->matched($callback); + } + /** + * Get all of the defined middleware short-hand names. + * + * @return array + * @static + */ + public static function getMiddleware() + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->getMiddleware(); + } + /** + * Register a short-hand name for a middleware. + * + * @param string $name + * @param string $class + * @return \Illuminate\Routing\Router + * @static + */ + public static function aliasMiddleware($name, $class) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->aliasMiddleware($name, $class); + } + /** + * Check if a middlewareGroup with the given name exists. + * + * @param string $name + * @return bool + * @static + */ + public static function hasMiddlewareGroup($name) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->hasMiddlewareGroup($name); + } + /** + * Get all of the defined middleware groups. + * + * @return array + * @static + */ + public static function getMiddlewareGroups() + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->getMiddlewareGroups(); + } + /** + * Register a group of middleware. + * + * @param string $name + * @param array $middleware + * @return \Illuminate\Routing\Router + * @static + */ + public static function middlewareGroup($name, $middleware) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->middlewareGroup($name, $middleware); + } + /** + * Add a middleware to the beginning of a middleware group. + * + * If the middleware is already in the group, it will not be added again. + * + * @param string $group + * @param string $middleware + * @return \Illuminate\Routing\Router + * @static + */ + public static function prependMiddlewareToGroup($group, $middleware) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->prependMiddlewareToGroup($group, $middleware); + } + /** + * Add a middleware to the end of a middleware group. + * + * If the middleware is already in the group, it will not be added again. + * + * @param string $group + * @param string $middleware + * @return \Illuminate\Routing\Router + * @static + */ + public static function pushMiddlewareToGroup($group, $middleware) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->pushMiddlewareToGroup($group, $middleware); + } + /** + * Add a new route parameter binder. + * + * @param string $key + * @param string|callable $binder + * @return void + * @static + */ + public static function bind($key, $binder) + { + /** @var \Illuminate\Routing\Router $instance */ + $instance->bind($key, $binder); + } + /** + * Register a model binder for a wildcard. + * + * @param string $key + * @param string $class + * @param \Closure|null $callback + * @return void + * @static + */ + public static function model($key, $class, $callback = null) + { + /** @var \Illuminate\Routing\Router $instance */ + $instance->model($key, $class, $callback); + } + /** + * Get the binding callback for a given binding. + * + * @param string $key + * @return \Closure|null + * @static + */ + public static function getBindingCallback($key) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->getBindingCallback($key); + } + /** + * Get the global "where" patterns. + * + * @return array + * @static + */ + public static function getPatterns() + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->getPatterns(); + } + /** + * Set a global where pattern on all routes. + * + * @param string $key + * @param string $pattern + * @return void + * @static + */ + public static function pattern($key, $pattern) + { + /** @var \Illuminate\Routing\Router $instance */ + $instance->pattern($key, $pattern); + } + /** + * Set a group of global where patterns on all routes. + * + * @param array $patterns + * @return void + * @static + */ + public static function patterns($patterns) + { + /** @var \Illuminate\Routing\Router $instance */ + $instance->patterns($patterns); + } + /** + * Determine if the router currently has a group stack. + * + * @return bool + * @static + */ + public static function hasGroupStack() + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->hasGroupStack(); + } + /** + * Get the current group stack for the router. + * + * @return array + * @static + */ + public static function getGroupStack() + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->getGroupStack(); + } + /** + * Get a route parameter for the current route. + * + * @param string $key + * @param string|null $default + * @return mixed + * @static + */ + public static function input($key, $default = null) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->input($key, $default); + } + /** + * Get the request currently being dispatched. + * + * @return \Illuminate\Http\Request + * @static + */ + public static function getCurrentRequest() + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->getCurrentRequest(); + } + /** + * Get the currently dispatched route instance. + * + * @return \Illuminate\Routing\Route + * @static + */ + public static function getCurrentRoute() + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->getCurrentRoute(); + } + /** + * Get the currently dispatched route instance. + * + * @return \Illuminate\Routing\Route|null + * @static + */ + public static function current() + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->current(); + } + /** + * Check if a route with the given name exists. + * + * @param string $name + * @return bool + * @static + */ + public static function has($name) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->has($name); + } + /** + * Get the current route name. + * + * @return string|null + * @static + */ + public static function currentRouteName() + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->currentRouteName(); + } + /** + * Alias for the "currentRouteNamed" method. + * + * @param mixed $patterns + * @return bool + * @static + */ + public static function is(...$patterns) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->is(...$patterns); + } + /** + * Determine if the current route matches a pattern. + * + * @param mixed $patterns + * @return bool + * @static + */ + public static function currentRouteNamed(...$patterns) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->currentRouteNamed(...$patterns); + } + /** + * Get the current route action. + * + * @return string|null + * @static + */ + public static function currentRouteAction() + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->currentRouteAction(); + } + /** + * Alias for the "currentRouteUses" method. + * + * @param array $patterns + * @return bool + * @static + */ + public static function uses(...$patterns) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->uses(...$patterns); + } + /** + * Determine if the current route action matches a given action. + * + * @param string $action + * @return bool + * @static + */ + public static function currentRouteUses($action) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->currentRouteUses($action); + } + /** + * Set the unmapped global resource parameters to singular. + * + * @param bool $singular + * @return void + * @static + */ + public static function singularResourceParameters($singular = true) + { + /** @var \Illuminate\Routing\Router $instance */ + $instance->singularResourceParameters($singular); + } + /** + * Set the global resource parameter mapping. + * + * @param array $parameters + * @return void + * @static + */ + public static function resourceParameters($parameters = []) + { + /** @var \Illuminate\Routing\Router $instance */ + $instance->resourceParameters($parameters); + } + /** + * Get or set the verbs used in the resource URIs. + * + * @param array $verbs + * @return array|null + * @static + */ + public static function resourceVerbs($verbs = []) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->resourceVerbs($verbs); + } + /** + * Get the underlying route collection. + * + * @return \Illuminate\Routing\RouteCollectionInterface + * @static + */ + public static function getRoutes() + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->getRoutes(); + } + /** + * Set the route collection instance. + * + * @param \Illuminate\Routing\RouteCollection $routes + * @return void + * @static + */ + public static function setRoutes($routes) + { + /** @var \Illuminate\Routing\Router $instance */ + $instance->setRoutes($routes); + } + /** + * Set the compiled route collection instance. + * + * @param array $routes + * @return void + * @static + */ + public static function setCompiledRoutes($routes) + { + /** @var \Illuminate\Routing\Router $instance */ + $instance->setCompiledRoutes($routes); + } + /** + * Remove any duplicate middleware from the given array. + * + * @param array $middleware + * @return array + * @static + */ + public static function uniqueMiddleware($middleware) + { + return \Illuminate\Routing\Router::uniqueMiddleware($middleware); + } + /** + * Register a custom macro. + * + * @param string $name + * @param object|callable $macro + * @return void + * @static + */ + public static function macro($name, $macro) + { + \Illuminate\Routing\Router::macro($name, $macro); + } + /** + * Mix another object into the class. + * + * @param object $mixin + * @param bool $replace + * @return void + * @throws \ReflectionException + * @static + */ + public static function mixin($mixin, $replace = true) + { + \Illuminate\Routing\Router::mixin($mixin, $replace); + } + /** + * Checks if macro is registered. + * + * @param string $name + * @return bool + * @static + */ + public static function hasMacro($name) + { + return \Illuminate\Routing\Router::hasMacro($name); + } + /** + * Dynamically handle calls to the class. + * + * @param string $method + * @param array $parameters + * @return mixed + * @throws \BadMethodCallException + * @static + */ + public static function macroCall($method, $parameters) + { + /** @var \Illuminate\Routing\Router $instance */ + return $instance->macroCall($method, $parameters); + } + + } + /** + * + * + * @see \Illuminate\Database\Schema\Builder + */ + class Schema { + /** + * Determine if the given table exists. + * + * @param string $table + * @return bool + * @static + */ + public static function hasTable($table) + { + /** @var \Illuminate\Database\Schema\MySqlBuilder $instance */ + return $instance->hasTable($table); + } + /** + * Get the column listing for a given table. + * + * @param string $table + * @return array + * @static + */ + public static function getColumnListing($table) + { + /** @var \Illuminate\Database\Schema\MySqlBuilder $instance */ + return $instance->getColumnListing($table); + } + /** + * Drop all tables from the database. + * + * @return void + * @static + */ + public static function dropAllTables() + { + /** @var \Illuminate\Database\Schema\MySqlBuilder $instance */ + $instance->dropAllTables(); + } + /** + * Drop all views from the database. + * + * @return void + * @static + */ + public static function dropAllViews() + { + /** @var \Illuminate\Database\Schema\MySqlBuilder $instance */ + $instance->dropAllViews(); + } + /** + * Get all of the table names for the database. + * + * @return array + * @static + */ + public static function getAllTables() + { + /** @var \Illuminate\Database\Schema\MySqlBuilder $instance */ + return $instance->getAllTables(); + } + /** + * Get all of the view names for the database. + * + * @return array + * @static + */ + public static function getAllViews() + { + /** @var \Illuminate\Database\Schema\MySqlBuilder $instance */ + return $instance->getAllViews(); + } + /** + * Set the default string length for migrations. + * + * @param int $length + * @return void + * @static + */ + public static function defaultStringLength($length) + { //Method inherited from \Illuminate\Database\Schema\Builder + \Illuminate\Database\Schema\MySqlBuilder::defaultStringLength($length); + } + /** + * Determine if the given table has a given column. + * + * @param string $table + * @param string $column + * @return bool + * @static + */ + public static function hasColumn($table, $column) + { //Method inherited from \Illuminate\Database\Schema\Builder + /** @var \Illuminate\Database\Schema\MySqlBuilder $instance */ + return $instance->hasColumn($table, $column); + } + /** + * Determine if the given table has given columns. + * + * @param string $table + * @param array $columns + * @return bool + * @static + */ + public static function hasColumns($table, $columns) + { //Method inherited from \Illuminate\Database\Schema\Builder + /** @var \Illuminate\Database\Schema\MySqlBuilder $instance */ + return $instance->hasColumns($table, $columns); + } + /** + * Get the data type for the given column name. + * + * @param string $table + * @param string $column + * @return string + * @static + */ + public static function getColumnType($table, $column) + { //Method inherited from \Illuminate\Database\Schema\Builder + /** @var \Illuminate\Database\Schema\MySqlBuilder $instance */ + return $instance->getColumnType($table, $column); + } + /** + * Modify a table on the schema. + * + * @param string $table + * @param \Closure $callback + * @return void + * @static + */ + public static function table($table, $callback) + { //Method inherited from \Illuminate\Database\Schema\Builder + /** @var \Illuminate\Database\Schema\MySqlBuilder $instance */ + $instance->table($table, $callback); + } + /** + * Create a new table on the schema. + * + * @param string $table + * @param \Closure $callback + * @return void + * @static + */ + public static function create($table, $callback) + { //Method inherited from \Illuminate\Database\Schema\Builder + /** @var \Illuminate\Database\Schema\MySqlBuilder $instance */ + $instance->create($table, $callback); + } + /** + * Drop a table from the schema. + * + * @param string $table + * @return void + * @static + */ + public static function drop($table) + { //Method inherited from \Illuminate\Database\Schema\Builder + /** @var \Illuminate\Database\Schema\MySqlBuilder $instance */ + $instance->drop($table); + } + /** + * Drop a table from the schema if it exists. + * + * @param string $table + * @return void + * @static + */ + public static function dropIfExists($table) + { //Method inherited from \Illuminate\Database\Schema\Builder + /** @var \Illuminate\Database\Schema\MySqlBuilder $instance */ + $instance->dropIfExists($table); + } + /** + * Drop all types from the database. + * + * @return void + * @throws \LogicException + * @static + */ + public static function dropAllTypes() + { //Method inherited from \Illuminate\Database\Schema\Builder + /** @var \Illuminate\Database\Schema\MySqlBuilder $instance */ + $instance->dropAllTypes(); + } + /** + * Rename a table on the schema. + * + * @param string $from + * @param string $to + * @return void + * @static + */ + public static function rename($from, $to) + { //Method inherited from \Illuminate\Database\Schema\Builder + /** @var \Illuminate\Database\Schema\MySqlBuilder $instance */ + $instance->rename($from, $to); + } + /** + * Enable foreign key constraints. + * + * @return bool + * @static + */ + public static function enableForeignKeyConstraints() + { //Method inherited from \Illuminate\Database\Schema\Builder + /** @var \Illuminate\Database\Schema\MySqlBuilder $instance */ + return $instance->enableForeignKeyConstraints(); + } + /** + * Disable foreign key constraints. + * + * @return bool + * @static + */ + public static function disableForeignKeyConstraints() + { //Method inherited from \Illuminate\Database\Schema\Builder + /** @var \Illuminate\Database\Schema\MySqlBuilder $instance */ + return $instance->disableForeignKeyConstraints(); + } + /** + * Register a custom Doctrine mapping type. + * + * @param string $class + * @param string $name + * @param string $type + * @return void + * @throws \Doctrine\DBAL\DBALException + * @throws \RuntimeException + * @static + */ + public static function registerCustomDoctrineType($class, $name, $type) + { //Method inherited from \Illuminate\Database\Schema\Builder + /** @var \Illuminate\Database\Schema\MySqlBuilder $instance */ + $instance->registerCustomDoctrineType($class, $name, $type); + } + /** + * Get the database connection instance. + * + * @return \Illuminate\Database\Connection + * @static + */ + public static function getConnection() + { //Method inherited from \Illuminate\Database\Schema\Builder + /** @var \Illuminate\Database\Schema\MySqlBuilder $instance */ + return $instance->getConnection(); + } + /** + * Set the database connection instance. + * + * @param \Illuminate\Database\Connection $connection + * @return \Illuminate\Database\Schema\MySqlBuilder + * @static + */ + public static function setConnection($connection) + { //Method inherited from \Illuminate\Database\Schema\Builder + /** @var \Illuminate\Database\Schema\MySqlBuilder $instance */ + return $instance->setConnection($connection); + } + /** + * Set the Schema Blueprint resolver callback. + * + * @param \Closure $resolver + * @return void + * @static + */ + public static function blueprintResolver($resolver) + { //Method inherited from \Illuminate\Database\Schema\Builder + /** @var \Illuminate\Database\Schema\MySqlBuilder $instance */ + $instance->blueprintResolver($resolver); + } + + } + /** + * + * + * @see \Illuminate\Session\SessionManager + * @see \Illuminate\Session\Store + */ + class Session { + /** + * Determine if requests for the same session should wait for each to finish before executing. + * + * @return bool + * @static + */ + public static function shouldBlock() + { + /** @var \Illuminate\Session\SessionManager $instance */ + return $instance->shouldBlock(); + } + /** + * Get the name of the cache store / driver that should be used to acquire session locks. + * + * @return string|null + * @static + */ + public static function blockDriver() + { + /** @var \Illuminate\Session\SessionManager $instance */ + return $instance->blockDriver(); + } + /** + * Get the session configuration. + * + * @return array + * @static + */ + public static function getSessionConfig() + { + /** @var \Illuminate\Session\SessionManager $instance */ + return $instance->getSessionConfig(); + } + /** + * Get the default session driver name. + * + * @return string + * @static + */ + public static function getDefaultDriver() + { + /** @var \Illuminate\Session\SessionManager $instance */ + return $instance->getDefaultDriver(); + } + /** + * Set the default session driver name. + * + * @param string $name + * @return void + * @static + */ + public static function setDefaultDriver($name) + { + /** @var \Illuminate\Session\SessionManager $instance */ + $instance->setDefaultDriver($name); + } + /** + * Get a driver instance. + * + * @param string|null $driver + * @return mixed + * @throws \InvalidArgumentException + * @static + */ + public static function driver($driver = null) + { //Method inherited from \Illuminate\Support\Manager + /** @var \Illuminate\Session\SessionManager $instance */ + return $instance->driver($driver); + } + /** + * Register a custom driver creator Closure. + * + * @param string $driver + * @param \Closure $callback + * @return \Illuminate\Session\SessionManager + * @static + */ + public static function extend($driver, $callback) + { //Method inherited from \Illuminate\Support\Manager + /** @var \Illuminate\Session\SessionManager $instance */ + return $instance->extend($driver, $callback); + } + /** + * Get all of the created "drivers". + * + * @return array + * @static + */ + public static function getDrivers() + { //Method inherited from \Illuminate\Support\Manager + /** @var \Illuminate\Session\SessionManager $instance */ + return $instance->getDrivers(); + } + /** + * Start the session, reading the data from a handler. + * + * @return bool + * @static + */ + public static function start() + { + /** @var \Illuminate\Session\Store $instance */ + return $instance->start(); + } + /** + * Save the session data to storage. + * + * @return void + * @static + */ + public static function save() + { + /** @var \Illuminate\Session\Store $instance */ + $instance->save(); + } + /** + * Age the flash data for the session. + * + * @return void + * @static + */ + public static function ageFlashData() + { + /** @var \Illuminate\Session\Store $instance */ + $instance->ageFlashData(); + } + /** + * Get all of the session data. + * + * @return array + * @static + */ + public static function all() + { + /** @var \Illuminate\Session\Store $instance */ + return $instance->all(); + } + /** + * Get a subset of the session data. + * + * @param array $keys + * @return array + * @static + */ + public static function only($keys) + { + /** @var \Illuminate\Session\Store $instance */ + return $instance->only($keys); + } + /** + * Checks if a key exists. + * + * @param string|array $key + * @return bool + * @static + */ + public static function exists($key) + { + /** @var \Illuminate\Session\Store $instance */ + return $instance->exists($key); + } + /** + * Checks if a key is present and not null. + * + * @param string|array $key + * @return bool + * @static + */ + public static function has($key) + { + /** @var \Illuminate\Session\Store $instance */ + return $instance->has($key); + } + /** + * Get an item from the session. + * + * @param string $key + * @param mixed $default + * @return mixed + * @static + */ + public static function get($key, $default = null) + { + /** @var \Illuminate\Session\Store $instance */ + return $instance->get($key, $default); + } + /** + * Get the value of a given key and then forget it. + * + * @param string $key + * @param mixed $default + * @return mixed + * @static + */ + public static function pull($key, $default = null) + { + /** @var \Illuminate\Session\Store $instance */ + return $instance->pull($key, $default); + } + /** + * Determine if the session contains old input. + * + * @param string|null $key + * @return bool + * @static + */ + public static function hasOldInput($key = null) + { + /** @var \Illuminate\Session\Store $instance */ + return $instance->hasOldInput($key); + } + /** + * Get the requested item from the flashed input array. + * + * @param string|null $key + * @param mixed $default + * @return mixed + * @static + */ + public static function getOldInput($key = null, $default = null) + { + /** @var \Illuminate\Session\Store $instance */ + return $instance->getOldInput($key, $default); + } + /** + * Replace the given session attributes entirely. + * + * @param array $attributes + * @return void + * @static + */ + public static function replace($attributes) + { + /** @var \Illuminate\Session\Store $instance */ + $instance->replace($attributes); + } + /** + * Put a key / value pair or array of key / value pairs in the session. + * + * @param string|array $key + * @param mixed $value + * @return void + * @static + */ + public static function put($key, $value = null) + { + /** @var \Illuminate\Session\Store $instance */ + $instance->put($key, $value); + } + /** + * Get an item from the session, or store the default value. + * + * @param string $key + * @param \Closure $callback + * @return mixed + * @static + */ + public static function remember($key, $callback) + { + /** @var \Illuminate\Session\Store $instance */ + return $instance->remember($key, $callback); + } + /** + * Push a value onto a session array. + * + * @param string $key + * @param mixed $value + * @return void + * @static + */ + public static function push($key, $value) + { + /** @var \Illuminate\Session\Store $instance */ + $instance->push($key, $value); + } + /** + * Increment the value of an item in the session. + * + * @param string $key + * @param int $amount + * @return mixed + * @static + */ + public static function increment($key, $amount = 1) + { + /** @var \Illuminate\Session\Store $instance */ + return $instance->increment($key, $amount); + } + /** + * Decrement the value of an item in the session. + * + * @param string $key + * @param int $amount + * @return int + * @static + */ + public static function decrement($key, $amount = 1) + { + /** @var \Illuminate\Session\Store $instance */ + return $instance->decrement($key, $amount); + } + /** + * Flash a key / value pair to the session. + * + * @param string $key + * @param mixed $value + * @return void + * @static + */ + public static function flash($key, $value = true) + { + /** @var \Illuminate\Session\Store $instance */ + $instance->flash($key, $value); + } + /** + * Flash a key / value pair to the session for immediate use. + * + * @param string $key + * @param mixed $value + * @return void + * @static + */ + public static function now($key, $value) + { + /** @var \Illuminate\Session\Store $instance */ + $instance->now($key, $value); + } + /** + * Reflash all of the session flash data. + * + * @return void + * @static + */ + public static function reflash() + { + /** @var \Illuminate\Session\Store $instance */ + $instance->reflash(); + } + /** + * Reflash a subset of the current flash data. + * + * @param array|mixed $keys + * @return void + * @static + */ + public static function keep($keys = null) + { + /** @var \Illuminate\Session\Store $instance */ + $instance->keep($keys); + } + /** + * Flash an input array to the session. + * + * @param array $value + * @return void + * @static + */ + public static function flashInput($value) + { + /** @var \Illuminate\Session\Store $instance */ + $instance->flashInput($value); + } + /** + * Remove an item from the session, returning its value. + * + * @param string $key + * @return mixed + * @static + */ + public static function remove($key) + { + /** @var \Illuminate\Session\Store $instance */ + return $instance->remove($key); + } + /** + * Remove one or many items from the session. + * + * @param string|array $keys + * @return void + * @static + */ + public static function forget($keys) + { + /** @var \Illuminate\Session\Store $instance */ + $instance->forget($keys); + } + /** + * Remove all of the items from the session. + * + * @return void + * @static + */ + public static function flush() + { + /** @var \Illuminate\Session\Store $instance */ + $instance->flush(); + } + /** + * Flush the session data and regenerate the ID. + * + * @return bool + * @static + */ + public static function invalidate() + { + /** @var \Illuminate\Session\Store $instance */ + return $instance->invalidate(); + } + /** + * Generate a new session identifier. + * + * @param bool $destroy + * @return bool + * @static + */ + public static function regenerate($destroy = false) + { + /** @var \Illuminate\Session\Store $instance */ + return $instance->regenerate($destroy); + } + /** + * Generate a new session ID for the session. + * + * @param bool $destroy + * @return bool + * @static + */ + public static function migrate($destroy = false) + { + /** @var \Illuminate\Session\Store $instance */ + return $instance->migrate($destroy); + } + /** + * Determine if the session has been started. + * + * @return bool + * @static + */ + public static function isStarted() + { + /** @var \Illuminate\Session\Store $instance */ + return $instance->isStarted(); + } + /** + * Get the name of the session. + * + * @return string + * @static + */ + public static function getName() + { + /** @var \Illuminate\Session\Store $instance */ + return $instance->getName(); + } + /** + * Set the name of the session. + * + * @param string $name + * @return void + * @static + */ + public static function setName($name) + { + /** @var \Illuminate\Session\Store $instance */ + $instance->setName($name); + } + /** + * Get the current session ID. + * + * @return string + * @static + */ + public static function getId() + { + /** @var \Illuminate\Session\Store $instance */ + return $instance->getId(); + } + /** + * Set the session ID. + * + * @param string $id + * @return void + * @static + */ + public static function setId($id) + { + /** @var \Illuminate\Session\Store $instance */ + $instance->setId($id); + } + /** + * Determine if this is a valid session ID. + * + * @param string $id + * @return bool + * @static + */ + public static function isValidId($id) + { + /** @var \Illuminate\Session\Store $instance */ + return $instance->isValidId($id); + } + /** + * Set the existence of the session on the handler if applicable. + * + * @param bool $value + * @return void + * @static + */ + public static function setExists($value) + { + /** @var \Illuminate\Session\Store $instance */ + $instance->setExists($value); + } + /** + * Get the CSRF token value. + * + * @return string + * @static + */ + public static function token() + { + /** @var \Illuminate\Session\Store $instance */ + return $instance->token(); + } + /** + * Regenerate the CSRF token value. + * + * @return void + * @static + */ + public static function regenerateToken() + { + /** @var \Illuminate\Session\Store $instance */ + $instance->regenerateToken(); + } + /** + * Get the previous URL from the session. + * + * @return string|null + * @static + */ + public static function previousUrl() + { + /** @var \Illuminate\Session\Store $instance */ + return $instance->previousUrl(); + } + /** + * Set the "previous" URL in the session. + * + * @param string $url + * @return void + * @static + */ + public static function setPreviousUrl($url) + { + /** @var \Illuminate\Session\Store $instance */ + $instance->setPreviousUrl($url); + } + /** + * Get the underlying session handler implementation. + * + * @return \SessionHandlerInterface + * @static + */ + public static function getHandler() + { + /** @var \Illuminate\Session\Store $instance */ + return $instance->getHandler(); + } + /** + * Determine if the session handler needs a request. + * + * @return bool + * @static + */ + public static function handlerNeedsRequest() + { + /** @var \Illuminate\Session\Store $instance */ + return $instance->handlerNeedsRequest(); + } + /** + * Set the request on the handler instance. + * + * @param \Illuminate\Http\Request $request + * @return void + * @static + */ + public static function setRequestOnHandler($request) + { + /** @var \Illuminate\Session\Store $instance */ + $instance->setRequestOnHandler($request); + } + + } + /** + * + * + * @see \Illuminate\Filesystem\FilesystemManager + */ + class Storage { + /** + * Get a filesystem instance. + * + * @param string|null $name + * @return \Illuminate\Filesystem\FilesystemAdapter + * @static + */ + public static function drive($name = null) + { + /** @var \Illuminate\Filesystem\FilesystemManager $instance */ + return $instance->drive($name); + } + /** + * Get a filesystem instance. + * + * @param string|null $name + * @return \Illuminate\Filesystem\FilesystemAdapter + * @static + */ + public static function disk($name = null) + { + /** @var \Illuminate\Filesystem\FilesystemManager $instance */ + return $instance->disk($name); + } + /** + * Get a default cloud filesystem instance. + * + * @return \Illuminate\Filesystem\FilesystemAdapter + * @static + */ + public static function cloud() + { + /** @var \Illuminate\Filesystem\FilesystemManager $instance */ + return $instance->cloud(); + } + /** + * Create an instance of the local driver. + * + * @param array $config + * @return \Illuminate\Filesystem\FilesystemAdapter + * @static + */ + public static function createLocalDriver($config) + { + /** @var \Illuminate\Filesystem\FilesystemManager $instance */ + return $instance->createLocalDriver($config); + } + /** + * Create an instance of the ftp driver. + * + * @param array $config + * @return \Illuminate\Filesystem\FilesystemAdapter + * @static + */ + public static function createFtpDriver($config) + { + /** @var \Illuminate\Filesystem\FilesystemManager $instance */ + return $instance->createFtpDriver($config); + } + /** + * Create an instance of the sftp driver. + * + * @param array $config + * @return \Illuminate\Filesystem\FilesystemAdapter + * @static + */ + public static function createSftpDriver($config) + { + /** @var \Illuminate\Filesystem\FilesystemManager $instance */ + return $instance->createSftpDriver($config); + } + /** + * Create an instance of the Amazon S3 driver. + * + * @param array $config + * @return \Illuminate\Contracts\Filesystem\Cloud + * @static + */ + public static function createS3Driver($config) + { + /** @var \Illuminate\Filesystem\FilesystemManager $instance */ + return $instance->createS3Driver($config); + } + /** + * Set the given disk instance. + * + * @param string $name + * @param mixed $disk + * @return \Illuminate\Filesystem\FilesystemManager + * @static + */ + public static function set($name, $disk) + { + /** @var \Illuminate\Filesystem\FilesystemManager $instance */ + return $instance->set($name, $disk); + } + /** + * Get the default driver name. + * + * @return string + * @static + */ + public static function getDefaultDriver() + { + /** @var \Illuminate\Filesystem\FilesystemManager $instance */ + return $instance->getDefaultDriver(); + } + /** + * Get the default cloud driver name. + * + * @return string + * @static + */ + public static function getDefaultCloudDriver() + { + /** @var \Illuminate\Filesystem\FilesystemManager $instance */ + return $instance->getDefaultCloudDriver(); + } + /** + * Unset the given disk instances. + * + * @param array|string $disk + * @return \Illuminate\Filesystem\FilesystemManager + * @static + */ + public static function forgetDisk($disk) + { + /** @var \Illuminate\Filesystem\FilesystemManager $instance */ + return $instance->forgetDisk($disk); + } + /** + * Register a custom driver creator Closure. + * + * @param string $driver + * @param \Closure $callback + * @return \Illuminate\Filesystem\FilesystemManager + * @static + */ + public static function extend($driver, $callback) + { + /** @var \Illuminate\Filesystem\FilesystemManager $instance */ + return $instance->extend($driver, $callback); + } + /** + * Assert that the given file exists. + * + * @param string|array $path + * @return \Illuminate\Filesystem\FilesystemAdapter + * @static + */ + public static function assertExists($path) + { + /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ + return $instance->assertExists($path); + } + /** + * Assert that the given file does not exist. + * + * @param string|array $path + * @return \Illuminate\Filesystem\FilesystemAdapter + * @static + */ + public static function assertMissing($path) + { + /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ + return $instance->assertMissing($path); + } + /** + * Determine if a file exists. + * + * @param string $path + * @return bool + * @static + */ + public static function exists($path) + { + /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ + return $instance->exists($path); + } + /** + * Determine if a file or directory is missing. + * + * @param string $path + * @return bool + * @static + */ + public static function missing($path) + { + /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ + return $instance->missing($path); + } + /** + * Get the full path for the file at the given "short" path. + * + * @param string $path + * @return string + * @static + */ + public static function path($path) + { + /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ + return $instance->path($path); + } + /** + * Get the contents of a file. + * + * @param string $path + * @return string + * @throws \Illuminate\Contracts\Filesystem\FileNotFoundException + * @static + */ + public static function get($path) + { + /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ + return $instance->get($path); + } + /** + * Create a streamed response for a given file. + * + * @param string $path + * @param string|null $name + * @param array|null $headers + * @param string|null $disposition + * @return \Symfony\Component\HttpFoundation\StreamedResponse + * @static + */ + public static function response($path, $name = null, $headers = [], $disposition = 'inline') + { + /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ + return $instance->response($path, $name, $headers, $disposition); + } + /** + * Create a streamed download response for a given file. + * + * @param string $path + * @param string|null $name + * @param array|null $headers + * @return \Symfony\Component\HttpFoundation\StreamedResponse + * @static + */ + public static function download($path, $name = null, $headers = []) + { + /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ + return $instance->download($path, $name, $headers); + } + /** + * Write the contents of a file. + * + * @param string $path + * @param string|resource $contents + * @param mixed $options + * @return bool + * @static + */ + public static function put($path, $contents, $options = []) + { + /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ + return $instance->put($path, $contents, $options); + } + /** + * Store the uploaded file on the disk. + * + * @param string $path + * @param \Illuminate\Http\File|\Illuminate\Http\UploadedFile|string $file + * @param mixed $options + * @return string|false + * @static + */ + public static function putFile($path, $file, $options = []) + { + /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ + return $instance->putFile($path, $file, $options); + } + /** + * Store the uploaded file on the disk with a given name. + * + * @param string $path + * @param \Illuminate\Http\File|\Illuminate\Http\UploadedFile|string $file + * @param string $name + * @param mixed $options + * @return string|false + * @static + */ + public static function putFileAs($path, $file, $name, $options = []) + { + /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ + return $instance->putFileAs($path, $file, $name, $options); + } + /** + * Get the visibility for the given path. + * + * @param string $path + * @return string + * @static + */ + public static function getVisibility($path) + { + /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ + return $instance->getVisibility($path); + } + /** + * Set the visibility for the given path. + * + * @param string $path + * @param string $visibility + * @return bool + * @static + */ + public static function setVisibility($path, $visibility) + { + /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ + return $instance->setVisibility($path, $visibility); + } + /** + * Prepend to a file. + * + * @param string $path + * @param string $data + * @param string $separator + * @return bool + * @static + */ + public static function prepend($path, $data, $separator = ' +') + { + /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ + return $instance->prepend($path, $data, $separator); + } + /** + * Append to a file. + * + * @param string $path + * @param string $data + * @param string $separator + * @return bool + * @static + */ + public static function append($path, $data, $separator = ' +') + { + /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ + return $instance->append($path, $data, $separator); + } + /** + * Delete the file at a given path. + * + * @param string|array $paths + * @return bool + * @static + */ + public static function delete($paths) + { + /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ + return $instance->delete($paths); + } + /** + * Copy a file to a new location. + * + * @param string $from + * @param string $to + * @return bool + * @static + */ + public static function copy($from, $to) + { + /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ + return $instance->copy($from, $to); + } + /** + * Move a file to a new location. + * + * @param string $from + * @param string $to + * @return bool + * @static + */ + public static function move($from, $to) + { + /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ + return $instance->move($from, $to); + } + /** + * Get the file size of a given file. + * + * @param string $path + * @return int + * @static + */ + public static function size($path) + { + /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ + return $instance->size($path); + } + /** + * Get the mime-type of a given file. + * + * @param string $path + * @return string|false + * @static + */ + public static function mimeType($path) + { + /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ + return $instance->mimeType($path); + } + /** + * Get the file's last modification time. + * + * @param string $path + * @return int + * @static + */ + public static function lastModified($path) + { + /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ + return $instance->lastModified($path); + } + /** + * Get the URL for the file at the given path. + * + * @param string $path + * @return string + * @throws \RuntimeException + * @static + */ + public static function url($path) + { + /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ + return $instance->url($path); + } + /** + * Get a resource to read the file. + * + * @param string $path + * @return resource|null The path resource or null on failure. + * @throws \Illuminate\Contracts\Filesystem\FileNotFoundException + * @static + */ + public static function readStream($path) + { + /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ + return $instance->readStream($path); + } + /** + * Write a new file using a stream. + * + * @param string $path + * @param resource $resource + * @param array $options + * @return bool + * @throws \InvalidArgumentException If $resource is not a file handle. + * @throws \Illuminate\Contracts\Filesystem\FileExistsException + * @static + */ + public static function writeStream($path, $resource, $options = []) + { + /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ + return $instance->writeStream($path, $resource, $options); + } + /** + * Get a temporary URL for the file at the given path. + * + * @param string $path + * @param \DateTimeInterface $expiration + * @param array $options + * @return string + * @throws \RuntimeException + * @static + */ + public static function temporaryUrl($path, $expiration, $options = []) + { + /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ + return $instance->temporaryUrl($path, $expiration, $options); + } + /** + * Get a temporary URL for the file at the given path. + * + * @param \League\Flysystem\AwsS3v3\AwsS3Adapter $adapter + * @param string $path + * @param \DateTimeInterface $expiration + * @param array $options + * @return string + * @static + */ + public static function getAwsTemporaryUrl($adapter, $path, $expiration, $options) + { + /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ + return $instance->getAwsTemporaryUrl($adapter, $path, $expiration, $options); + } + /** + * Get an array of all files in a directory. + * + * @param string|null $directory + * @param bool $recursive + * @return array + * @static + */ + public static function files($directory = null, $recursive = false) + { + /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ + return $instance->files($directory, $recursive); + } + /** + * Get all of the files from the given directory (recursive). + * + * @param string|null $directory + * @return array + * @static + */ + public static function allFiles($directory = null) + { + /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ + return $instance->allFiles($directory); + } + /** + * Get all of the directories within a given directory. + * + * @param string|null $directory + * @param bool $recursive + * @return array + * @static + */ + public static function directories($directory = null, $recursive = false) + { + /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ + return $instance->directories($directory, $recursive); + } + /** + * Get all (recursive) of the directories within a given directory. + * + * @param string|null $directory + * @return array + * @static + */ + public static function allDirectories($directory = null) + { + /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ + return $instance->allDirectories($directory); + } + /** + * Create a directory. + * + * @param string $path + * @return bool + * @static + */ + public static function makeDirectory($path) + { + /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ + return $instance->makeDirectory($path); + } + /** + * Recursively delete a directory. + * + * @param string $directory + * @return bool + * @static + */ + public static function deleteDirectory($directory) + { + /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ + return $instance->deleteDirectory($directory); + } + /** + * Flush the Flysystem cache. + * + * @return void + * @static + */ + public static function flushCache() + { + /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ + $instance->flushCache(); + } + /** + * Get the Flysystem driver. + * + * @return \League\Flysystem\FilesystemInterface + * @static + */ + public static function getDriver() + { + /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ + return $instance->getDriver(); + } + + } + /** + * + * + * @see \Illuminate\Routing\UrlGenerator + */ + class URL { + /** + * Get the full URL for the current request. + * + * @return string + * @static + */ + public static function full() + { + /** @var \Illuminate\Routing\UrlGenerator $instance */ + return $instance->full(); + } + /** + * Get the current URL for the request. + * + * @return string + * @static + */ + public static function current() + { + /** @var \Illuminate\Routing\UrlGenerator $instance */ + return $instance->current(); + } + /** + * Get the URL for the previous request. + * + * @param mixed $fallback + * @return string + * @static + */ + public static function previous($fallback = false) + { + /** @var \Illuminate\Routing\UrlGenerator $instance */ + return $instance->previous($fallback); + } + /** + * Generate an absolute URL to the given path. + * + * @param string $path + * @param mixed $extra + * @param bool|null $secure + * @return string + * @static + */ + public static function to($path, $extra = [], $secure = null) + { + /** @var \Illuminate\Routing\UrlGenerator $instance */ + return $instance->to($path, $extra, $secure); + } + /** + * Generate a secure, absolute URL to the given path. + * + * @param string $path + * @param array $parameters + * @return string + * @static + */ + public static function secure($path, $parameters = []) + { + /** @var \Illuminate\Routing\UrlGenerator $instance */ + return $instance->secure($path, $parameters); + } + /** + * Generate the URL to an application asset. + * + * @param string $path + * @param bool|null $secure + * @return string + * @static + */ + public static function asset($path, $secure = null) + { + /** @var \Illuminate\Routing\UrlGenerator $instance */ + return $instance->asset($path, $secure); + } + /** + * Generate the URL to a secure asset. + * + * @param string $path + * @return string + * @static + */ + public static function secureAsset($path) + { + /** @var \Illuminate\Routing\UrlGenerator $instance */ + return $instance->secureAsset($path); + } + /** + * Generate the URL to an asset from a custom root domain such as CDN, etc. + * + * @param string $root + * @param string $path + * @param bool|null $secure + * @return string + * @static + */ + public static function assetFrom($root, $path, $secure = null) + { + /** @var \Illuminate\Routing\UrlGenerator $instance */ + return $instance->assetFrom($root, $path, $secure); + } + /** + * Get the default scheme for a raw URL. + * + * @param bool|null $secure + * @return string + * @static + */ + public static function formatScheme($secure = null) + { + /** @var \Illuminate\Routing\UrlGenerator $instance */ + return $instance->formatScheme($secure); + } + /** + * Create a signed route URL for a named route. + * + * @param string $name + * @param mixed $parameters + * @param \DateTimeInterface|\DateInterval|int|null $expiration + * @param bool $absolute + * @return string + * @throws \InvalidArgumentException + * @static + */ + public static function signedRoute($name, $parameters = [], $expiration = null, $absolute = true) + { + /** @var \Illuminate\Routing\UrlGenerator $instance */ + return $instance->signedRoute($name, $parameters, $expiration, $absolute); + } + /** + * Create a temporary signed route URL for a named route. + * + * @param string $name + * @param \DateTimeInterface|\DateInterval|int $expiration + * @param array $parameters + * @param bool $absolute + * @return string + * @static + */ + public static function temporarySignedRoute($name, $expiration, $parameters = [], $absolute = true) + { + /** @var \Illuminate\Routing\UrlGenerator $instance */ + return $instance->temporarySignedRoute($name, $expiration, $parameters, $absolute); + } + /** + * Determine if the given request has a valid signature. + * + * @param \Illuminate\Http\Request $request + * @param bool $absolute + * @return bool + * @static + */ + public static function hasValidSignature($request, $absolute = true) + { + /** @var \Illuminate\Routing\UrlGenerator $instance */ + return $instance->hasValidSignature($request, $absolute); + } + /** + * Determine if the signature from the given request matches the URL. + * + * @param \Illuminate\Http\Request $request + * @param bool $absolute + * @return bool + * @static + */ + public static function hasCorrectSignature($request, $absolute = true) + { + /** @var \Illuminate\Routing\UrlGenerator $instance */ + return $instance->hasCorrectSignature($request, $absolute); + } + /** + * Determine if the expires timestamp from the given request is not from the past. + * + * @param \Illuminate\Http\Request $request + * @return bool + * @static + */ + public static function signatureHasNotExpired($request) + { + /** @var \Illuminate\Routing\UrlGenerator $instance */ + return $instance->signatureHasNotExpired($request); + } + /** + * Get the URL to a named route. + * + * @param string $name + * @param mixed $parameters + * @param bool $absolute + * @return string + * @throws \Symfony\Component\Routing\Exception\RouteNotFoundException + * @static + */ + public static function route($name, $parameters = [], $absolute = true) + { + /** @var \Illuminate\Routing\UrlGenerator $instance */ + return $instance->route($name, $parameters, $absolute); + } + /** + * Get the URL for a given route instance. + * + * @param \Illuminate\Routing\Route $route + * @param mixed $parameters + * @param bool $absolute + * @return string + * @throws \Illuminate\Routing\Exceptions\UrlGenerationException + * @static + */ + public static function toRoute($route, $parameters, $absolute) + { + /** @var \Illuminate\Routing\UrlGenerator $instance */ + return $instance->toRoute($route, $parameters, $absolute); + } + /** + * Get the URL to a controller action. + * + * @param string|array $action + * @param mixed $parameters + * @param bool $absolute + * @return string + * @throws \InvalidArgumentException + * @static + */ + public static function action($action, $parameters = [], $absolute = true) + { + /** @var \Illuminate\Routing\UrlGenerator $instance */ + return $instance->action($action, $parameters, $absolute); + } + /** + * Format the array of URL parameters. + * + * @param mixed|array $parameters + * @return array + * @static + */ + public static function formatParameters($parameters) + { + /** @var \Illuminate\Routing\UrlGenerator $instance */ + return $instance->formatParameters($parameters); + } + /** + * Get the base URL for the request. + * + * @param string $scheme + * @param string|null $root + * @return string + * @static + */ + public static function formatRoot($scheme, $root = null) + { + /** @var \Illuminate\Routing\UrlGenerator $instance */ + return $instance->formatRoot($scheme, $root); + } + /** + * Format the given URL segments into a single URL. + * + * @param string $root + * @param string $path + * @param \Illuminate\Routing\Route|null $route + * @return string + * @static + */ + public static function format($root, $path, $route = null) + { + /** @var \Illuminate\Routing\UrlGenerator $instance */ + return $instance->format($root, $path, $route); + } + /** + * Determine if the given path is a valid URL. + * + * @param string $path + * @return bool + * @static + */ + public static function isValidUrl($path) + { + /** @var \Illuminate\Routing\UrlGenerator $instance */ + return $instance->isValidUrl($path); + } + /** + * Set the default named parameters used by the URL generator. + * + * @param array $defaults + * @return void + * @static + */ + public static function defaults($defaults) + { + /** @var \Illuminate\Routing\UrlGenerator $instance */ + $instance->defaults($defaults); + } + /** + * Get the default named parameters used by the URL generator. + * + * @return array + * @static + */ + public static function getDefaultParameters() + { + /** @var \Illuminate\Routing\UrlGenerator $instance */ + return $instance->getDefaultParameters(); + } + /** + * Force the scheme for URLs. + * + * @param string|null $scheme + * @return void + * @static + */ + public static function forceScheme($scheme) + { + /** @var \Illuminate\Routing\UrlGenerator $instance */ + $instance->forceScheme($scheme); + } + /** + * Set the forced root URL. + * + * @param string|null $root + * @return void + * @static + */ + public static function forceRootUrl($root) + { + /** @var \Illuminate\Routing\UrlGenerator $instance */ + $instance->forceRootUrl($root); + } + /** + * Set a callback to be used to format the host of generated URLs. + * + * @param \Closure $callback + * @return \Illuminate\Routing\UrlGenerator + * @static + */ + public static function formatHostUsing($callback) + { + /** @var \Illuminate\Routing\UrlGenerator $instance */ + return $instance->formatHostUsing($callback); + } + /** + * Set a callback to be used to format the path of generated URLs. + * + * @param \Closure $callback + * @return \Illuminate\Routing\UrlGenerator + * @static + */ + public static function formatPathUsing($callback) + { + /** @var \Illuminate\Routing\UrlGenerator $instance */ + return $instance->formatPathUsing($callback); + } + /** + * Get the path formatter being used by the URL generator. + * + * @return \Closure + * @static + */ + public static function pathFormatter() + { + /** @var \Illuminate\Routing\UrlGenerator $instance */ + return $instance->pathFormatter(); + } + /** + * Get the request instance. + * + * @return \Illuminate\Http\Request + * @static + */ + public static function getRequest() + { + /** @var \Illuminate\Routing\UrlGenerator $instance */ + return $instance->getRequest(); + } + /** + * Set the current request instance. + * + * @param \Illuminate\Http\Request $request + * @return void + * @static + */ + public static function setRequest($request) + { + /** @var \Illuminate\Routing\UrlGenerator $instance */ + $instance->setRequest($request); + } + /** + * Set the route collection. + * + * @param \Illuminate\Routing\RouteCollectionInterface $routes + * @return \Illuminate\Routing\UrlGenerator + * @static + */ + public static function setRoutes($routes) + { + /** @var \Illuminate\Routing\UrlGenerator $instance */ + return $instance->setRoutes($routes); + } + /** + * Set the session resolver for the generator. + * + * @param callable $sessionResolver + * @return \Illuminate\Routing\UrlGenerator + * @static + */ + public static function setSessionResolver($sessionResolver) + { + /** @var \Illuminate\Routing\UrlGenerator $instance */ + return $instance->setSessionResolver($sessionResolver); + } + /** + * Set the encryption key resolver. + * + * @param callable $keyResolver + * @return \Illuminate\Routing\UrlGenerator + * @static + */ + public static function setKeyResolver($keyResolver) + { + /** @var \Illuminate\Routing\UrlGenerator $instance */ + return $instance->setKeyResolver($keyResolver); + } + /** + * Set the root controller namespace. + * + * @param string $rootNamespace + * @return \Illuminate\Routing\UrlGenerator + * @static + */ + public static function setRootControllerNamespace($rootNamespace) + { + /** @var \Illuminate\Routing\UrlGenerator $instance */ + return $instance->setRootControllerNamespace($rootNamespace); + } + /** + * Register a custom macro. + * + * @param string $name + * @param object|callable $macro + * @return void + * @static + */ + public static function macro($name, $macro) + { + \Illuminate\Routing\UrlGenerator::macro($name, $macro); + } + /** + * Mix another object into the class. + * + * @param object $mixin + * @param bool $replace + * @return void + * @throws \ReflectionException + * @static + */ + public static function mixin($mixin, $replace = true) + { + \Illuminate\Routing\UrlGenerator::mixin($mixin, $replace); + } + /** + * Checks if macro is registered. + * + * @param string $name + * @return bool + * @static + */ + public static function hasMacro($name) + { + return \Illuminate\Routing\UrlGenerator::hasMacro($name); + } + + } + /** + * + * + * @see \Illuminate\Validation\Factory + */ + class Validator { + /** + * Create a new Validator instance. + * + * @param array $data + * @param array $rules + * @param array $messages + * @param array $customAttributes + * @return \Illuminate\Validation\Validator + * @static + */ + public static function make($data, $rules, $messages = [], $customAttributes = []) + { + /** @var \Illuminate\Validation\Factory $instance */ + return $instance->make($data, $rules, $messages, $customAttributes); + } + /** + * Validate the given data against the provided rules. + * + * @param array $data + * @param array $rules + * @param array $messages + * @param array $customAttributes + * @return array + * @throws \Illuminate\Validation\ValidationException + * @static + */ + public static function validate($data, $rules, $messages = [], $customAttributes = []) + { + /** @var \Illuminate\Validation\Factory $instance */ + return $instance->validate($data, $rules, $messages, $customAttributes); + } + /** + * Register a custom validator extension. + * + * @param string $rule + * @param \Closure|string $extension + * @param string|null $message + * @return void + * @static + */ + public static function extend($rule, $extension, $message = null) + { + /** @var \Illuminate\Validation\Factory $instance */ + $instance->extend($rule, $extension, $message); + } + /** + * Register a custom implicit validator extension. + * + * @param string $rule + * @param \Closure|string $extension + * @param string|null $message + * @return void + * @static + */ + public static function extendImplicit($rule, $extension, $message = null) + { + /** @var \Illuminate\Validation\Factory $instance */ + $instance->extendImplicit($rule, $extension, $message); + } + /** + * Register a custom dependent validator extension. + * + * @param string $rule + * @param \Closure|string $extension + * @param string|null $message + * @return void + * @static + */ + public static function extendDependent($rule, $extension, $message = null) + { + /** @var \Illuminate\Validation\Factory $instance */ + $instance->extendDependent($rule, $extension, $message); + } + /** + * Register a custom validator message replacer. + * + * @param string $rule + * @param \Closure|string $replacer + * @return void + * @static + */ + public static function replacer($rule, $replacer) + { + /** @var \Illuminate\Validation\Factory $instance */ + $instance->replacer($rule, $replacer); + } + /** + * Set the Validator instance resolver. + * + * @param \Closure $resolver + * @return void + * @static + */ + public static function resolver($resolver) + { + /** @var \Illuminate\Validation\Factory $instance */ + $instance->resolver($resolver); + } + /** + * Get the Translator implementation. + * + * @return \Illuminate\Contracts\Translation\Translator + * @static + */ + public static function getTranslator() + { + /** @var \Illuminate\Validation\Factory $instance */ + return $instance->getTranslator(); + } + /** + * Get the Presence Verifier implementation. + * + * @return \Illuminate\Validation\PresenceVerifierInterface + * @static + */ + public static function getPresenceVerifier() + { + /** @var \Illuminate\Validation\Factory $instance */ + return $instance->getPresenceVerifier(); + } + /** + * Set the Presence Verifier implementation. + * + * @param \Illuminate\Validation\PresenceVerifierInterface $presenceVerifier + * @return void + * @static + */ + public static function setPresenceVerifier($presenceVerifier) + { + /** @var \Illuminate\Validation\Factory $instance */ + $instance->setPresenceVerifier($presenceVerifier); + } + + } + /** + * + * + * @see \Illuminate\View\Factory + */ + class View { + /** + * Get the evaluated view contents for the given view. + * + * @param string $path + * @param \Illuminate\Contracts\Support\Arrayable|array $data + * @param array $mergeData + * @return \Illuminate\Contracts\View\View + * @static + */ + public static function file($path, $data = [], $mergeData = []) + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->file($path, $data, $mergeData); + } + /** + * Get the evaluated view contents for the given view. + * + * @param string $view + * @param \Illuminate\Contracts\Support\Arrayable|array $data + * @param array $mergeData + * @return \Illuminate\Contracts\View\View + * @static + */ + public static function make($view, $data = [], $mergeData = []) + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->make($view, $data, $mergeData); + } + /** + * Get the first view that actually exists from the given list. + * + * @param array $views + * @param \Illuminate\Contracts\Support\Arrayable|array $data + * @param array $mergeData + * @return \Illuminate\Contracts\View\View + * @throws \InvalidArgumentException + * @static + */ + public static function first($views, $data = [], $mergeData = []) + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->first($views, $data, $mergeData); + } + /** + * Get the rendered content of the view based on a given condition. + * + * @param bool $condition + * @param string $view + * @param \Illuminate\Contracts\Support\Arrayable|array $data + * @param array $mergeData + * @return string + * @static + */ + public static function renderWhen($condition, $view, $data = [], $mergeData = []) + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->renderWhen($condition, $view, $data, $mergeData); + } + /** + * Get the rendered contents of a partial from a loop. + * + * @param string $view + * @param array $data + * @param string $iterator + * @param string $empty + * @return string + * @static + */ + public static function renderEach($view, $data, $iterator, $empty = 'raw|') + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->renderEach($view, $data, $iterator, $empty); + } + /** + * Determine if a given view exists. + * + * @param string $view + * @return bool + * @static + */ + public static function exists($view) + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->exists($view); + } + /** + * Get the appropriate view engine for the given path. + * + * @param string $path + * @return \Illuminate\Contracts\View\Engine + * @throws \InvalidArgumentException + * @static + */ + public static function getEngineFromPath($path) + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->getEngineFromPath($path); + } + /** + * Add a piece of shared data to the environment. + * + * @param array|string $key + * @param mixed|null $value + * @return mixed + * @static + */ + public static function share($key, $value = null) + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->share($key, $value); + } + /** + * Increment the rendering counter. + * + * @return void + * @static + */ + public static function incrementRender() + { + /** @var \Illuminate\View\Factory $instance */ + $instance->incrementRender(); + } + /** + * Decrement the rendering counter. + * + * @return void + * @static + */ + public static function decrementRender() + { + /** @var \Illuminate\View\Factory $instance */ + $instance->decrementRender(); + } + /** + * Check if there are no active render operations. + * + * @return bool + * @static + */ + public static function doneRendering() + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->doneRendering(); + } + /** + * Determine if the given once token has been rendered. + * + * @param string $id + * @return bool + * @static + */ + public static function hasRenderedOnce($id) + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->hasRenderedOnce($id); + } + /** + * Mark the given once token as having been rendered. + * + * @param string $id + * @return void + * @static + */ + public static function markAsRenderedOnce($id) + { + /** @var \Illuminate\View\Factory $instance */ + $instance->markAsRenderedOnce($id); + } + /** + * Add a location to the array of view locations. + * + * @param string $location + * @return void + * @static + */ + public static function addLocation($location) + { + /** @var \Illuminate\View\Factory $instance */ + $instance->addLocation($location); + } + /** + * Add a new namespace to the loader. + * + * @param string $namespace + * @param string|array $hints + * @return \Illuminate\View\Factory + * @static + */ + public static function addNamespace($namespace, $hints) + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->addNamespace($namespace, $hints); + } + /** + * Prepend a new namespace to the loader. + * + * @param string $namespace + * @param string|array $hints + * @return \Illuminate\View\Factory + * @static + */ + public static function prependNamespace($namespace, $hints) + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->prependNamespace($namespace, $hints); + } + /** + * Replace the namespace hints for the given namespace. + * + * @param string $namespace + * @param string|array $hints + * @return \Illuminate\View\Factory + * @static + */ + public static function replaceNamespace($namespace, $hints) + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->replaceNamespace($namespace, $hints); + } + /** + * Register a valid view extension and its engine. + * + * @param string $extension + * @param string $engine + * @param \Closure|null $resolver + * @return void + * @static + */ + public static function addExtension($extension, $engine, $resolver = null) + { + /** @var \Illuminate\View\Factory $instance */ + $instance->addExtension($extension, $engine, $resolver); + } + /** + * Flush all of the factory state like sections and stacks. + * + * @return void + * @static + */ + public static function flushState() + { + /** @var \Illuminate\View\Factory $instance */ + $instance->flushState(); + } + /** + * Flush all of the section contents if done rendering. + * + * @return void + * @static + */ + public static function flushStateIfDoneRendering() + { + /** @var \Illuminate\View\Factory $instance */ + $instance->flushStateIfDoneRendering(); + } + /** + * Get the extension to engine bindings. + * + * @return array + * @static + */ + public static function getExtensions() + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->getExtensions(); + } + /** + * Get the engine resolver instance. + * + * @return \Illuminate\View\Engines\EngineResolver + * @static + */ + public static function getEngineResolver() + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->getEngineResolver(); + } + /** + * Get the view finder instance. + * + * @return \Illuminate\View\ViewFinderInterface + * @static + */ + public static function getFinder() + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->getFinder(); + } + /** + * Set the view finder instance. + * + * @param \Illuminate\View\ViewFinderInterface $finder + * @return void + * @static + */ + public static function setFinder($finder) + { + /** @var \Illuminate\View\Factory $instance */ + $instance->setFinder($finder); + } + /** + * Flush the cache of views located by the finder. + * + * @return void + * @static + */ + public static function flushFinderCache() + { + /** @var \Illuminate\View\Factory $instance */ + $instance->flushFinderCache(); + } + /** + * Get the event dispatcher instance. + * + * @return \Illuminate\Contracts\Events\Dispatcher + * @static + */ + public static function getDispatcher() + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->getDispatcher(); + } + /** + * Set the event dispatcher instance. + * + * @param \Illuminate\Contracts\Events\Dispatcher $events + * @return void + * @static + */ + public static function setDispatcher($events) + { + /** @var \Illuminate\View\Factory $instance */ + $instance->setDispatcher($events); + } + /** + * Get the IoC container instance. + * + * @return \Illuminate\Contracts\Container\Container + * @static + */ + public static function getContainer() + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->getContainer(); + } + /** + * Set the IoC container instance. + * + * @param \Illuminate\Contracts\Container\Container $container + * @return void + * @static + */ + public static function setContainer($container) + { + /** @var \Illuminate\View\Factory $instance */ + $instance->setContainer($container); + } + /** + * Get an item from the shared data. + * + * @param string $key + * @param mixed $default + * @return mixed + * @static + */ + public static function shared($key, $default = null) + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->shared($key, $default); + } + /** + * Get all of the shared data for the environment. + * + * @return array + * @static + */ + public static function getShared() + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->getShared(); + } + /** + * Register a custom macro. + * + * @param string $name + * @param object|callable $macro + * @return void + * @static + */ + public static function macro($name, $macro) + { + \Illuminate\View\Factory::macro($name, $macro); + } + /** + * Mix another object into the class. + * + * @param object $mixin + * @param bool $replace + * @return void + * @throws \ReflectionException + * @static + */ + public static function mixin($mixin, $replace = true) + { + \Illuminate\View\Factory::mixin($mixin, $replace); + } + /** + * Checks if macro is registered. + * + * @param string $name + * @return bool + * @static + */ + public static function hasMacro($name) + { + return \Illuminate\View\Factory::hasMacro($name); + } + /** + * Start a component rendering process. + * + * @param \Illuminate\View\View|\Closure|string $view + * @param array $data + * @return void + * @static + */ + public static function startComponent($view, $data = []) + { + /** @var \Illuminate\View\Factory $instance */ + $instance->startComponent($view, $data); + } + /** + * Get the first view that actually exists from the given list, and start a component. + * + * @param array $names + * @param array $data + * @return void + * @static + */ + public static function startComponentFirst($names, $data = []) + { + /** @var \Illuminate\View\Factory $instance */ + $instance->startComponentFirst($names, $data); + } + /** + * Render the current component. + * + * @return string + * @static + */ + public static function renderComponent() + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->renderComponent(); + } + /** + * Start the slot rendering process. + * + * @param string $name + * @param string|null $content + * @return void + * @static + */ + public static function slot($name, $content = null) + { + /** @var \Illuminate\View\Factory $instance */ + $instance->slot($name, $content); + } + /** + * Save the slot content for rendering. + * + * @return void + * @static + */ + public static function endSlot() + { + /** @var \Illuminate\View\Factory $instance */ + $instance->endSlot(); + } + /** + * Register a view creator event. + * + * @param array|string $views + * @param \Closure|string $callback + * @return array + * @static + */ + public static function creator($views, $callback) + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->creator($views, $callback); + } + /** + * Register multiple view composers via an array. + * + * @param array $composers + * @return array + * @static + */ + public static function composers($composers) + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->composers($composers); + } + /** + * Register a view composer event. + * + * @param array|string $views + * @param \Closure|string $callback + * @return array + * @static + */ + public static function composer($views, $callback) + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->composer($views, $callback); + } + /** + * Call the composer for a given view. + * + * @param \Illuminate\Contracts\View\View $view + * @return void + * @static + */ + public static function callComposer($view) + { + /** @var \Illuminate\View\Factory $instance */ + $instance->callComposer($view); + } + /** + * Call the creator for a given view. + * + * @param \Illuminate\Contracts\View\View $view + * @return void + * @static + */ + public static function callCreator($view) + { + /** @var \Illuminate\View\Factory $instance */ + $instance->callCreator($view); + } + /** + * Start injecting content into a section. + * + * @param string $section + * @param string|null $content + * @return void + * @static + */ + public static function startSection($section, $content = null) + { + /** @var \Illuminate\View\Factory $instance */ + $instance->startSection($section, $content); + } + /** + * Inject inline content into a section. + * + * @param string $section + * @param string $content + * @return void + * @static + */ + public static function inject($section, $content) + { + /** @var \Illuminate\View\Factory $instance */ + $instance->inject($section, $content); + } + /** + * Stop injecting content into a section and return its contents. + * + * @return string + * @static + */ + public static function yieldSection() + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->yieldSection(); + } + /** + * Stop injecting content into a section. + * + * @param bool $overwrite + * @return string + * @throws \InvalidArgumentException + * @static + */ + public static function stopSection($overwrite = false) + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->stopSection($overwrite); + } + /** + * Stop injecting content into a section and append it. + * + * @return string + * @throws \InvalidArgumentException + * @static + */ + public static function appendSection() + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->appendSection(); + } + /** + * Get the string contents of a section. + * + * @param string $section + * @param string $default + * @return string + * @static + */ + public static function yieldContent($section, $default = '') + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->yieldContent($section, $default); + } + /** + * Get the parent placeholder for the current request. + * + * @param string $section + * @return string + * @static + */ + public static function parentPlaceholder($section = '') + { + return \Illuminate\View\Factory::parentPlaceholder($section); + } + /** + * Check if section exists. + * + * @param string $name + * @return bool + * @static + */ + public static function hasSection($name) + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->hasSection($name); + } + /** + * Check if section does not exist. + * + * @param string $name + * @return bool + * @static + */ + public static function sectionMissing($name) + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->sectionMissing($name); + } + /** + * Get the contents of a section. + * + * @param string $name + * @param string|null $default + * @return mixed + * @static + */ + public static function getSection($name, $default = null) + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->getSection($name, $default); + } + /** + * Get the entire array of sections. + * + * @return array + * @static + */ + public static function getSections() + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->getSections(); + } + /** + * Flush all of the sections. + * + * @return void + * @static + */ + public static function flushSections() + { + /** @var \Illuminate\View\Factory $instance */ + $instance->flushSections(); + } + /** + * Add new loop to the stack. + * + * @param \Countable|array $data + * @return void + * @static + */ + public static function addLoop($data) + { + /** @var \Illuminate\View\Factory $instance */ + $instance->addLoop($data); + } + /** + * Increment the top loop's indices. + * + * @return void + * @static + */ + public static function incrementLoopIndices() + { + /** @var \Illuminate\View\Factory $instance */ + $instance->incrementLoopIndices(); + } + /** + * Pop a loop from the top of the loop stack. + * + * @return void + * @static + */ + public static function popLoop() + { + /** @var \Illuminate\View\Factory $instance */ + $instance->popLoop(); + } + /** + * Get an instance of the last loop in the stack. + * + * @return \stdClass|null + * @static + */ + public static function getLastLoop() + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->getLastLoop(); + } + /** + * Get the entire loop stack. + * + * @return array + * @static + */ + public static function getLoopStack() + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->getLoopStack(); + } + /** + * Start injecting content into a push section. + * + * @param string $section + * @param string $content + * @return void + * @static + */ + public static function startPush($section, $content = '') + { + /** @var \Illuminate\View\Factory $instance */ + $instance->startPush($section, $content); + } + /** + * Stop injecting content into a push section. + * + * @return string + * @throws \InvalidArgumentException + * @static + */ + public static function stopPush() + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->stopPush(); + } + /** + * Start prepending content into a push section. + * + * @param string $section + * @param string $content + * @return void + * @static + */ + public static function startPrepend($section, $content = '') + { + /** @var \Illuminate\View\Factory $instance */ + $instance->startPrepend($section, $content); + } + /** + * Stop prepending content into a push section. + * + * @return string + * @throws \InvalidArgumentException + * @static + */ + public static function stopPrepend() + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->stopPrepend(); + } + /** + * Get the string contents of a push section. + * + * @param string $section + * @param string $default + * @return string + * @static + */ + public static function yieldPushContent($section, $default = '') + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->yieldPushContent($section, $default); + } + /** + * Flush all of the stacks. + * + * @return void + * @static + */ + public static function flushStacks() + { + /** @var \Illuminate\View\Factory $instance */ + $instance->flushStacks(); + } + /** + * Start a translation block. + * + * @param array $replacements + * @return void + * @static + */ + public static function startTranslation($replacements = []) + { + /** @var \Illuminate\View\Factory $instance */ + $instance->startTranslation($replacements); + } + /** + * Render the current translation. + * + * @return string + * @static + */ + public static function renderTranslation() + { + /** @var \Illuminate\View\Factory $instance */ + return $instance->renderTranslation(); + } + + } + +} + + namespace Illuminate\Support { + /** + * + * + */ + class Arr { + + } + /** + * + * + */ + class Str { + + } + +} + + namespace Barryvdh\Debugbar { + /** + * + * + * @method static void alert(mixed $message) + * @method static void critical(mixed $message) + * @method static void debug(mixed $message) + * @method static void emergency(mixed $message) + * @method static void error(mixed $message) + * @method static void info(mixed $message) + * @method static void log(mixed $message) + * @method static void notice(mixed $message) + * @method static void warning(mixed $message) + * @see \Barryvdh\Debugbar\LaravelDebugbar + */ + class Facade { + /** + * Enable the Debugbar and boot, if not already booted. + * + * @static + */ + public static function enable() + { + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->enable(); + } + /** + * Boot the debugbar (add collectors, renderer and listener) + * + * @static + */ + public static function boot() + { + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->boot(); + } + /** + * + * + * @static + */ + public static function shouldCollect($name, $default = false) + { + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->shouldCollect($name, $default); + } + /** + * Adds a data collector + * + * @param \Barryvdh\Debugbar\DataCollectorInterface $collector + * @throws DebugBarException + * @return \Barryvdh\Debugbar\LaravelDebugbar + * @static + */ + public static function addCollector($collector) + { + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->addCollector($collector); + } + /** + * Handle silenced errors + * + * @param $level + * @param $message + * @param string $file + * @param int $line + * @param array $context + * @throws \ErrorException + * @static + */ + public static function handleError($level, $message, $file = '', $line = 0, $context = []) + { + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->handleError($level, $message, $file, $line, $context); + } + /** + * Starts a measure + * + * @param string $name Internal name, used to stop the measure + * @param string $label Public name + * @static + */ + public static function startMeasure($name, $label = null) + { + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->startMeasure($name, $label); + } + /** + * Stops a measure + * + * @param string $name + * @static + */ + public static function stopMeasure($name) + { + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->stopMeasure($name); + } + /** + * Adds an exception to be profiled in the debug bar + * + * @param \Exception $e + * @deprecated in favor of addThrowable + * @static + */ + public static function addException($e) + { + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->addException($e); + } + /** + * Adds an exception to be profiled in the debug bar + * + * @param \Exception $e + * @static + */ + public static function addThrowable($e) + { + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->addThrowable($e); + } + /** + * Returns a JavascriptRenderer for this instance + * + * @param string $baseUrl + * @param string $basePathng + * @return \Barryvdh\Debugbar\JavascriptRenderer + * @static + */ + public static function getJavascriptRenderer($baseUrl = null, $basePath = null) + { + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->getJavascriptRenderer($baseUrl, $basePath); + } + /** + * Modify the response and inject the debugbar (or data in headers) + * + * @param \Symfony\Component\HttpFoundation\Request $request + * @param \Symfony\Component\HttpFoundation\Response $response + * @return \Symfony\Component\HttpFoundation\Response + * @static + */ + public static function modifyResponse($request, $response) + { + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->modifyResponse($request, $response); + } + /** + * Check if the Debugbar is enabled + * + * @return boolean + * @static + */ + public static function isEnabled() + { + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->isEnabled(); + } + /** + * Collects the data from the collectors + * + * @return array + * @static + */ + public static function collect() + { + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->collect(); + } + /** + * Injects the web debug toolbar into the given Response. + * + * @param \Symfony\Component\HttpFoundation\Response $response A Response instance + * Based on https://github.com/symfony/WebProfilerBundle/blob/master/EventListener/WebDebugToolbarListener.php + * @static + */ + public static function injectDebugbar($response) + { + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->injectDebugbar($response); + } + /** + * Disable the Debugbar + * + * @static + */ + public static function disable() + { + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->disable(); + } + /** + * Adds a measure + * + * @param string $label + * @param float $start + * @param float $end + * @static + */ + public static function addMeasure($label, $start, $end) + { + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->addMeasure($label, $start, $end); + } + /** + * Utility function to measure the execution of a Closure + * + * @param string $label + * @param \Closure $closure + * @return mixed + * @static + */ + public static function measure($label, $closure) + { + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->measure($label, $closure); + } + /** + * Collect data in a CLI request + * + * @return array + * @static + */ + public static function collectConsole() + { + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->collectConsole(); + } + /** + * Adds a message to the MessagesCollector + * + * A message can be anything from an object to a string + * + * @param mixed $message + * @param string $label + * @static + */ + public static function addMessage($message, $label = 'info') + { + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->addMessage($message, $label); + } + /** + * Checks if a data collector has been added + * + * @param string $name + * @return boolean + * @static + */ + public static function hasCollector($name) + { //Method inherited from \DebugBar\DebugBar + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->hasCollector($name); + } + /** + * Returns a data collector + * + * @param string $name + * @return \DebugBar\DataCollectorInterface + * @throws DebugBarException + * @static + */ + public static function getCollector($name) + { //Method inherited from \DebugBar\DebugBar + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->getCollector($name); + } + /** + * Returns an array of all data collectors + * + * @return \DebugBar\array[DataCollectorInterface] + * @static + */ + public static function getCollectors() + { //Method inherited from \DebugBar\DebugBar + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->getCollectors(); + } + /** + * Sets the request id generator + * + * @param \DebugBar\RequestIdGeneratorInterface $generator + * @return \Barryvdh\Debugbar\LaravelDebugbar + * @static + */ + public static function setRequestIdGenerator($generator) + { //Method inherited from \DebugBar\DebugBar + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->setRequestIdGenerator($generator); + } + /** + * + * + * @return \DebugBar\RequestIdGeneratorInterface + * @static + */ + public static function getRequestIdGenerator() + { //Method inherited from \DebugBar\DebugBar + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->getRequestIdGenerator(); + } + /** + * Returns the id of the current request + * + * @return string + * @static + */ + public static function getCurrentRequestId() + { //Method inherited from \DebugBar\DebugBar + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->getCurrentRequestId(); + } + /** + * Sets the storage backend to use to store the collected data + * + * @param \DebugBar\StorageInterface $storage + * @return \Barryvdh\Debugbar\LaravelDebugbar + * @static + */ + public static function setStorage($storage = null) + { //Method inherited from \DebugBar\DebugBar + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->setStorage($storage); + } + /** + * + * + * @return \DebugBar\StorageInterface + * @static + */ + public static function getStorage() + { //Method inherited from \DebugBar\DebugBar + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->getStorage(); + } + /** + * Checks if the data will be persisted + * + * @return boolean + * @static + */ + public static function isDataPersisted() + { //Method inherited from \DebugBar\DebugBar + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->isDataPersisted(); + } + /** + * Sets the HTTP driver + * + * @param \DebugBar\HttpDriverInterface $driver + * @return \Barryvdh\Debugbar\LaravelDebugbar + * @static + */ + public static function setHttpDriver($driver) + { //Method inherited from \DebugBar\DebugBar + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->setHttpDriver($driver); + } + /** + * Returns the HTTP driver + * + * If no http driver where defined, a PhpHttpDriver is automatically created + * + * @return \DebugBar\HttpDriverInterface + * @static + */ + public static function getHttpDriver() + { //Method inherited from \DebugBar\DebugBar + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->getHttpDriver(); + } + /** + * Returns collected data + * + * Will collect the data if none have been collected yet + * + * @return array + * @static + */ + public static function getData() + { //Method inherited from \DebugBar\DebugBar + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->getData(); + } + /** + * Returns an array of HTTP headers containing the data + * + * @param string $headerName + * @param integer $maxHeaderLength + * @return array + * @static + */ + public static function getDataAsHeaders($headerName = 'phpdebugbar', $maxHeaderLength = 4096, $maxTotalHeaderLength = 250000) + { //Method inherited from \DebugBar\DebugBar + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->getDataAsHeaders($headerName, $maxHeaderLength, $maxTotalHeaderLength); + } + /** + * Sends the data through the HTTP headers + * + * @param bool $useOpenHandler + * @param string $headerName + * @param integer $maxHeaderLength + * @return \Barryvdh\Debugbar\LaravelDebugbar + * @static + */ + public static function sendDataInHeaders($useOpenHandler = null, $headerName = 'phpdebugbar', $maxHeaderLength = 4096) + { //Method inherited from \DebugBar\DebugBar + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->sendDataInHeaders($useOpenHandler, $headerName, $maxHeaderLength); + } + /** + * Stacks the data in the session for later rendering + * + * @static + */ + public static function stackData() + { //Method inherited from \DebugBar\DebugBar + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->stackData(); + } + /** + * Checks if there is stacked data in the session + * + * @return boolean + * @static + */ + public static function hasStackedData() + { //Method inherited from \DebugBar\DebugBar + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->hasStackedData(); + } + /** + * Returns the data stacked in the session + * + * @param boolean $delete Whether to delete the data in the session + * @return array + * @static + */ + public static function getStackedData($delete = true) + { //Method inherited from \DebugBar\DebugBar + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->getStackedData($delete); + } + /** + * Sets the key to use in the $_SESSION array + * + * @param string $ns + * @return \Barryvdh\Debugbar\LaravelDebugbar + * @static + */ + public static function setStackDataSessionNamespace($ns) + { //Method inherited from \DebugBar\DebugBar + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->setStackDataSessionNamespace($ns); + } + /** + * Returns the key used in the $_SESSION array + * + * @return string + * @static + */ + public static function getStackDataSessionNamespace() + { //Method inherited from \DebugBar\DebugBar + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->getStackDataSessionNamespace(); + } + /** + * Sets whether to only use the session to store stacked data even + * if a storage is enabled + * + * @param boolean $enabled + * @return \Barryvdh\Debugbar\LaravelDebugbar + * @static + */ + public static function setStackAlwaysUseSessionStorage($enabled = true) + { //Method inherited from \DebugBar\DebugBar + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->setStackAlwaysUseSessionStorage($enabled); + } + /** + * Checks if the session is always used to store stacked data + * even if a storage is enabled + * + * @return boolean + * @static + */ + public static function isStackAlwaysUseSessionStorage() + { //Method inherited from \DebugBar\DebugBar + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->isStackAlwaysUseSessionStorage(); + } + /** + * + * + * @static + */ + public static function offsetSet($key, $value) + { //Method inherited from \DebugBar\DebugBar + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->offsetSet($key, $value); + } + /** + * + * + * @static + */ + public static function offsetGet($key) + { //Method inherited from \DebugBar\DebugBar + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->offsetGet($key); + } + /** + * + * + * @static + */ + public static function offsetExists($key) + { //Method inherited from \DebugBar\DebugBar + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->offsetExists($key); + } + /** + * + * + * @static + */ + public static function offsetUnset($key) + { //Method inherited from \DebugBar\DebugBar + /** @var \Barryvdh\Debugbar\LaravelDebugbar $instance */ + return $instance->offsetUnset($key); + } + + } + +} + + namespace Facade\Ignition\Facades { + /** + * Class Flare. + * + * @see \Facade\FlareClient\Flare + */ + class Flare { + /** + * + * + * @static + */ + public static function register($apiKey, $apiSecret = null, $contextDetector = null, $container = null) + { + return \Facade\FlareClient\Flare::register($apiKey, $apiSecret, $contextDetector, $container); + } + /** + * + * + * @static + */ + public static function getMiddleware() + { + /** @var \Facade\FlareClient\Flare $instance */ + return $instance->getMiddleware(); + } + /** + * + * + * @static + */ + public static function registerFlareHandlers() + { + /** @var \Facade\FlareClient\Flare $instance */ + return $instance->registerFlareHandlers(); + } + /** + * + * + * @static + */ + public static function registerExceptionHandler() + { + /** @var \Facade\FlareClient\Flare $instance */ + return $instance->registerExceptionHandler(); + } + /** + * + * + * @static + */ + public static function registerErrorHandler() + { + /** @var \Facade\FlareClient\Flare $instance */ + return $instance->registerErrorHandler(); + } + /** + * + * + * @static + */ + public static function registerMiddleware($callable) + { + /** @var \Facade\FlareClient\Flare $instance */ + return $instance->registerMiddleware($callable); + } + /** + * + * + * @static + */ + public static function getMiddlewares() + { + /** @var \Facade\FlareClient\Flare $instance */ + return $instance->getMiddlewares(); + } + /** + * + * + * @static + */ + public static function glow($name, $messageLevel = 'info', $metaData = []) + { + /** @var \Facade\FlareClient\Flare $instance */ + return $instance->glow($name, $messageLevel, $metaData); + } + /** + * + * + * @static + */ + public static function handleException($throwable) + { + /** @var \Facade\FlareClient\Flare $instance */ + return $instance->handleException($throwable); + } + /** + * + * + * @static + */ + public static function handleError($code, $message, $file = '', $line = 0) + { + /** @var \Facade\FlareClient\Flare $instance */ + return $instance->handleError($code, $message, $file, $line); + } + /** + * + * + * @static + */ + public static function applicationPath($applicationPath) + { + /** @var \Facade\FlareClient\Flare $instance */ + return $instance->applicationPath($applicationPath); + } + /** + * + * + * @static + */ + public static function report($throwable, $callback = null) + { + /** @var \Facade\FlareClient\Flare $instance */ + return $instance->report($throwable, $callback); + } + /** + * + * + * @static + */ + public static function reportMessage($message, $logLevel, $callback = null) + { + /** @var \Facade\FlareClient\Flare $instance */ + return $instance->reportMessage($message, $logLevel, $callback); + } + /** + * + * + * @static + */ + public static function sendTestReport($throwable) + { + /** @var \Facade\FlareClient\Flare $instance */ + return $instance->sendTestReport($throwable); + } + /** + * + * + * @static + */ + public static function reset() + { + /** @var \Facade\FlareClient\Flare $instance */ + return $instance->reset(); + } + /** + * + * + * @static + */ + public static function anonymizeIp() + { + /** @var \Facade\FlareClient\Flare $instance */ + return $instance->anonymizeIp(); + } + /** + * + * + * @static + */ + public static function createReport($throwable) + { + /** @var \Facade\FlareClient\Flare $instance */ + return $instance->createReport($throwable); + } + /** + * + * + * @static + */ + public static function createReportFromMessage($message, $logLevel) + { + /** @var \Facade\FlareClient\Flare $instance */ + return $instance->createReportFromMessage($message, $logLevel); + } + /** + * + * + * @static + */ + public static function stage($stage) + { + /** @var \Facade\FlareClient\Flare $instance */ + return $instance->stage($stage); + } + /** + * + * + * @static + */ + public static function messageLevel($messageLevel) + { + /** @var \Facade\FlareClient\Flare $instance */ + return $instance->messageLevel($messageLevel); + } + /** + * + * + * @static + */ + public static function getGroup($groupName = 'context', $default = []) + { + /** @var \Facade\FlareClient\Flare $instance */ + return $instance->getGroup($groupName, $default); + } + /** + * + * + * @static + */ + public static function context($key, $value) + { + /** @var \Facade\FlareClient\Flare $instance */ + return $instance->context($key, $value); + } + /** + * + * + * @static + */ + public static function group($groupName, $properties) + { + /** @var \Facade\FlareClient\Flare $instance */ + return $instance->group($groupName, $properties); + } + + } + +} + + namespace Illuminate\Http { + /** + * + * + */ + class Request { + /** + * + * + * @param array $rules + * @param mixed $params + * @static + */ + public static function validate($rules, ...$params) + { + return \Illuminate\Http\Request::validate($rules, ...$params); + } + /** + * + * + * @param string $errorBag + * @param array $rules + * @param mixed $params + * @static + */ + public static function validateWithBag($errorBag, $rules, ...$params) + { + return \Illuminate\Http\Request::validateWithBag($errorBag, $rules, ...$params); + } + /** + * + * + * @param mixed $absolute + * @static + */ + public static function hasValidSignature($absolute = true) + { + return \Illuminate\Http\Request::hasValidSignature($absolute); + } + + } + +} + + +namespace { + class App extends \Illuminate\Support\Facades\App {} + class Arr extends \Illuminate\Support\Arr {} + class Artisan extends \Illuminate\Support\Facades\Artisan {} + class Auth extends \Illuminate\Support\Facades\Auth {} + class Blade extends \Illuminate\Support\Facades\Blade {} + class Broadcast extends \Illuminate\Support\Facades\Broadcast {} + class Bus extends \Illuminate\Support\Facades\Bus {} + class Cache extends \Illuminate\Support\Facades\Cache {} + class Config extends \Illuminate\Support\Facades\Config {} + class Cookie extends \Illuminate\Support\Facades\Cookie {} + class Crypt extends \Illuminate\Support\Facades\Crypt {} + class DB extends \Illuminate\Support\Facades\DB {} + class Eloquent extends \Illuminate\Database\Eloquent\Model { + /** + * Create and return an un-saved model instance. + * + * @param array $attributes + * @return \Illuminate\Database\Eloquent\Model|static + * @static + */ + public static function make($attributes = []) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->make($attributes); + } + + /** + * Register a new global scope. + * + * @param string $identifier + * @param \Illuminate\Database\Eloquent\Scope|\Closure $scope + * @return \Illuminate\Database\Eloquent\Builder|static + * @static + */ + public static function withGlobalScope($identifier, $scope) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->withGlobalScope($identifier, $scope); + } + + /** + * Remove a registered global scope. + * + * @param \Illuminate\Database\Eloquent\Scope|string $scope + * @return \Illuminate\Database\Eloquent\Builder|static + * @static + */ + public static function withoutGlobalScope($scope) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->withoutGlobalScope($scope); + } + + /** + * Remove all or passed registered global scopes. + * + * @param array|null $scopes + * @return \Illuminate\Database\Eloquent\Builder|static + * @static + */ + public static function withoutGlobalScopes($scopes = null) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->withoutGlobalScopes($scopes); + } + + /** + * Get an array of global scopes that were removed from the query. + * + * @return array + * @static + */ + public static function removedScopes() + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->removedScopes(); + } + + /** + * Add a where clause on the primary key to the query. + * + * @param mixed $id + * @return \Illuminate\Database\Eloquent\Builder|static + * @static + */ + public static function whereKey($id) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->whereKey($id); + } + + /** + * Add a where clause on the primary key to the query. + * + * @param mixed $id + * @return \Illuminate\Database\Eloquent\Builder|static + * @static + */ + public static function whereKeyNot($id) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->whereKeyNot($id); + } + + /** + * Add a basic where clause to the query. + * + * @param \Closure|string|array|\Illuminate\Database\Query\Expression $column + * @param mixed $operator + * @param mixed $value + * @param string $boolean + * @return \Illuminate\Database\Eloquent\Builder|static + * @static + */ + public static function where($column, $operator = null, $value = null, $boolean = 'and') + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->where($column, $operator, $value, $boolean); + } + + /** + * Add a basic where clause to the query, and return the first result. + * + * @param \Closure|string|array|\Illuminate\Database\Query\Expression $column + * @param mixed $operator + * @param mixed $value + * @param string $boolean + * @return \Illuminate\Database\Eloquent\Model|static + * @static + */ + public static function firstWhere($column, $operator = null, $value = null, $boolean = 'and') + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->firstWhere($column, $operator, $value, $boolean); + } + + /** + * Add an "or where" clause to the query. + * + * @param \Closure|array|string|\Illuminate\Database\Query\Expression $column + * @param mixed $operator + * @param mixed $value + * @return \Illuminate\Database\Eloquent\Builder|static + * @static + */ + public static function orWhere($column, $operator = null, $value = null) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->orWhere($column, $operator, $value); + } + + /** + * Add an "order by" clause for a timestamp to the query. + * + * @param string|\Illuminate\Database\Query\Expression $column + * @return \Illuminate\Database\Eloquent\Builder|static + * @static + */ + public static function latest($column = null) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->latest($column); + } + + /** + * Add an "order by" clause for a timestamp to the query. + * + * @param string|\Illuminate\Database\Query\Expression $column + * @return \Illuminate\Database\Eloquent\Builder|static + * @static + */ + public static function oldest($column = null) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->oldest($column); + } + + /** + * Create a collection of models from plain arrays. + * + * @param array $items + * @return \Illuminate\Database\Eloquent\Collection + * @static + */ + public static function hydrate($items) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->hydrate($items); + } + + /** + * Create a collection of models from a raw query. + * + * @param string $query + * @param array $bindings + * @return \Illuminate\Database\Eloquent\Collection + * @static + */ + public static function fromQuery($query, $bindings = []) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->fromQuery($query, $bindings); + } + + /** + * Find a model by its primary key. + * + * @param mixed $id + * @param array $columns + * @return \Illuminate\Database\Eloquent\Model|\Illuminate\Database\Eloquent\Collection|static[]|static|null + * @static + */ + public static function find($id, $columns = []) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->find($id, $columns); + } + + /** + * Find multiple models by their primary keys. + * + * @param \Illuminate\Contracts\Support\Arrayable|array $ids + * @param array $columns + * @return \Illuminate\Database\Eloquent\Collection + * @static + */ + public static function findMany($ids, $columns = []) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->findMany($ids, $columns); + } + + /** + * Find a model by its primary key or throw an exception. + * + * @param mixed $id + * @param array $columns + * @return \Illuminate\Database\Eloquent\Model|\Illuminate\Database\Eloquent\Collection|static|static[] + * @throws \Illuminate\Database\Eloquent\ModelNotFoundException + * @static + */ + public static function findOrFail($id, $columns = []) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->findOrFail($id, $columns); + } + + /** + * Find a model by its primary key or return fresh model instance. + * + * @param mixed $id + * @param array $columns + * @return \Illuminate\Database\Eloquent\Model|static + * @static + */ + public static function findOrNew($id, $columns = []) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->findOrNew($id, $columns); + } + + /** + * Get the first record matching the attributes or instantiate it. + * + * @param array $attributes + * @param array $values + * @return \Illuminate\Database\Eloquent\Model|static + * @static + */ + public static function firstOrNew($attributes = [], $values = []) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->firstOrNew($attributes, $values); + } + + /** + * Get the first record matching the attributes or create it. + * + * @param array $attributes + * @param array $values + * @return \Illuminate\Database\Eloquent\Model|static + * @static + */ + public static function firstOrCreate($attributes, $values = []) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->firstOrCreate($attributes, $values); + } + + /** + * Create or update a record matching the attributes, and fill it with values. + * + * @param array $attributes + * @param array $values + * @return \Illuminate\Database\Eloquent\Model|static + * @static + */ + public static function updateOrCreate($attributes, $values = []) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->updateOrCreate($attributes, $values); + } + + /** + * Execute the query and get the first result or throw an exception. + * + * @param array $columns + * @return \Illuminate\Database\Eloquent\Model|static + * @throws \Illuminate\Database\Eloquent\ModelNotFoundException + * @static + */ + public static function firstOrFail($columns = []) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->firstOrFail($columns); + } + + /** + * Execute the query and get the first result or call a callback. + * + * @param \Closure|array $columns + * @param \Closure|null $callback + * @return \Illuminate\Database\Eloquent\Model|static|mixed + * @static + */ + public static function firstOr($columns = [], $callback = null) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->firstOr($columns, $callback); + } + + /** + * Get a single column's value from the first result of a query. + * + * @param string|\Illuminate\Database\Query\Expression $column + * @return mixed + * @static + */ + public static function value($column) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->value($column); + } + + /** + * Execute the query as a "select" statement. + * + * @param array|string $columns + * @return \Illuminate\Database\Eloquent\Collection|static[] + * @static + */ + public static function get($columns = []) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->get($columns); + } + + /** + * Get the hydrated models without eager loading. + * + * @param array|string $columns + * @return \Illuminate\Database\Eloquent\Model[]|static[] + * @static + */ + public static function getModels($columns = []) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->getModels($columns); + } + + /** + * Eager load the relationships for the models. + * + * @param array $models + * @return array + * @static + */ + public static function eagerLoadRelations($models) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->eagerLoadRelations($models); + } + + /** + * Get a lazy collection for the given query. + * + * @return \Illuminate\Support\LazyCollection + * @static + */ + public static function cursor() + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->cursor(); + } + + /** + * Get an array with the values of a given column. + * + * @param string|\Illuminate\Database\Query\Expression $column + * @param string|null $key + * @return \Illuminate\Support\Collection + * @static + */ + public static function pluck($column, $key = null) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->pluck($column, $key); + } + + /** + * Paginate the given query. + * + * @param int|null $perPage + * @param array $columns + * @param string $pageName + * @param int|null $page + * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator + * @throws \InvalidArgumentException + * @static + */ + public static function paginate($perPage = null, $columns = [], $pageName = 'page', $page = null) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->paginate($perPage, $columns, $pageName, $page); + } + + /** + * Paginate the given query into a simple paginator. + * + * @param int|null $perPage + * @param array $columns + * @param string $pageName + * @param int|null $page + * @return \Illuminate\Contracts\Pagination\Paginator + * @static + */ + public static function simplePaginate($perPage = null, $columns = [], $pageName = 'page', $page = null) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->simplePaginate($perPage, $columns, $pageName, $page); + } + + /** + * Save a new model and return the instance. + * + * @param array $attributes + * @return \Illuminate\Database\Eloquent\Model|$this + * @static + */ + public static function create($attributes = []) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->create($attributes); + } + + /** + * Save a new model and return the instance. Allow mass-assignment. + * + * @param array $attributes + * @return \Illuminate\Database\Eloquent\Model|$this + * @static + */ + public static function forceCreate($attributes) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->forceCreate($attributes); + } + + /** + * Register a replacement for the default delete function. + * + * @param \Closure $callback + * @return void + * @static + */ + public static function onDelete($callback) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + $instance->onDelete($callback); + } + + /** + * Call the given local model scopes. + * + * @param array|string $scopes + * @return static|mixed + * @static + */ + public static function scopes($scopes) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->scopes($scopes); + } + + /** + * Apply the scopes to the Eloquent builder instance and return it. + * + * @return static + * @static + */ + public static function applyScopes() + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->applyScopes(); + } + + /** + * Prevent the specified relations from being eager loaded. + * + * @param mixed $relations + * @return \Illuminate\Database\Eloquent\Builder|static + * @static + */ + public static function without($relations) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->without($relations); + } + + /** + * Create a new instance of the model being queried. + * + * @param array $attributes + * @return \Illuminate\Database\Eloquent\Model|static + * @static + */ + public static function newModelInstance($attributes = []) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->newModelInstance($attributes); + } + + /** + * Apply query-time casts to the model instance. + * + * @param array $casts + * @return \Illuminate\Database\Eloquent\Builder|static + * @static + */ + public static function withCasts($casts) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->withCasts($casts); + } + + /** + * Get the underlying query builder instance. + * + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function getQuery() + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->getQuery(); + } + + /** + * Set the underlying query builder instance. + * + * @param \Illuminate\Database\Query\Builder $query + * @return \Illuminate\Database\Eloquent\Builder|static + * @static + */ + public static function setQuery($query) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->setQuery($query); + } + + /** + * Get a base query builder instance. + * + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function toBase() + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->toBase(); + } + + /** + * Get the relationships being eagerly loaded. + * + * @return array + * @static + */ + public static function getEagerLoads() + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->getEagerLoads(); + } + + /** + * Set the relationships being eagerly loaded. + * + * @param array $eagerLoad + * @return \Illuminate\Database\Eloquent\Builder|static + * @static + */ + public static function setEagerLoads($eagerLoad) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->setEagerLoads($eagerLoad); + } + + /** + * Get the model instance being queried. + * + * @return \Illuminate\Database\Eloquent\Model|static + * @static + */ + public static function getModel() + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->getModel(); + } + + /** + * Set a model instance for the model being queried. + * + * @param \Illuminate\Database\Eloquent\Model $model + * @return \Illuminate\Database\Eloquent\Builder|static + * @static + */ + public static function setModel($model) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->setModel($model); + } + + /** + * Get the given macro by name. + * + * @param string $name + * @return \Closure + * @static + */ + public static function getMacro($name) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->getMacro($name); + } + + /** + * Checks if a macro is registered. + * + * @param string $name + * @return bool + * @static + */ + public static function hasMacro($name) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->hasMacro($name); + } + + /** + * Get the given global macro by name. + * + * @param string $name + * @return \Closure + * @static + */ + public static function getGlobalMacro($name) + { + return \Illuminate\Database\Eloquent\Builder::getGlobalMacro($name); + } + + /** + * Checks if a global macro is registered. + * + * @param string $name + * @return bool + * @static + */ + public static function hasGlobalMacro($name) + { + return \Illuminate\Database\Eloquent\Builder::hasGlobalMacro($name); + } + + /** + * Chunk the results of the query. + * + * @param int $count + * @param callable $callback + * @return bool + * @static + */ + public static function chunk($count, $callback) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->chunk($count, $callback); + } + + /** + * Execute a callback over each item while chunking. + * + * @param callable $callback + * @param int $count + * @return bool + * @static + */ + public static function each($callback, $count = 1000) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->each($callback, $count); + } + + /** + * Chunk the results of a query by comparing IDs. + * + * @param int $count + * @param callable $callback + * @param string|null $column + * @param string|null $alias + * @return bool + * @static + */ + public static function chunkById($count, $callback, $column = null, $alias = null) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->chunkById($count, $callback, $column, $alias); + } + + /** + * Execute a callback over each item while chunking by ID. + * + * @param callable $callback + * @param int $count + * @param string|null $column + * @param string|null $alias + * @return bool + * @static + */ + public static function eachById($callback, $count = 1000, $column = null, $alias = null) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->eachById($callback, $count, $column, $alias); + } + + /** + * Execute the query and get the first result. + * + * @param array|string $columns + * @return \Illuminate\Database\Eloquent\Model|object|static|null + * @static + */ + public static function first($columns = []) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->first($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. + * + * @param callable $callback + * @return \Illuminate\Database\Eloquent\Builder|static + * @static + */ + public static function tap($callback) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->tap($callback); + } + + /** + * Apply the callback's query changes if the given "value" is false. + * + * @param mixed $value + * @param callable $callback + * @param callable|null $default + * @return mixed|$this + * @static + */ + public static function unless($value, $callback, $default = null) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->unless($value, $callback, $default); + } + + /** + * Add a relationship count / exists condition to the query. + * + * @param \Illuminate\Database\Eloquent\Relations\Relation|string $relation + * @param string $operator + * @param int $count + * @param string $boolean + * @param \Closure|null $callback + * @return \Illuminate\Database\Eloquent\Builder|static + * @throws \RuntimeException + * @static + */ + public static function has($relation, $operator = '>=', $count = 1, $boolean = 'and', $callback = null) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->has($relation, $operator, $count, $boolean, $callback); + } + + /** + * Add a relationship count / exists condition to the query with an "or". + * + * @param string $relation + * @param string $operator + * @param int $count + * @return \Illuminate\Database\Eloquent\Builder|static + * @static + */ + public static function orHas($relation, $operator = '>=', $count = 1) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->orHas($relation, $operator, $count); + } + + /** + * Add a relationship count / exists condition to the query. + * + * @param string $relation + * @param string $boolean + * @param \Closure|null $callback + * @return \Illuminate\Database\Eloquent\Builder|static + * @static + */ + public static function doesntHave($relation, $boolean = 'and', $callback = null) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->doesntHave($relation, $boolean, $callback); + } + + /** + * Add a relationship count / exists condition to the query with an "or". + * + * @param string $relation + * @return \Illuminate\Database\Eloquent\Builder|static + * @static + */ + public static function orDoesntHave($relation) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->orDoesntHave($relation); + } + + /** + * Add a relationship count / exists condition to the query with where clauses. + * + * @param string $relation + * @param \Closure|null $callback + * @param string $operator + * @param int $count + * @return \Illuminate\Database\Eloquent\Builder|static + * @static + */ + public static function whereHas($relation, $callback = null, $operator = '>=', $count = 1) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->whereHas($relation, $callback, $operator, $count); + } + + /** + * Add a relationship count / exists condition to the query with where clauses and an "or". + * + * @param string $relation + * @param \Closure|null $callback + * @param string $operator + * @param int $count + * @return \Illuminate\Database\Eloquent\Builder|static + * @static + */ + public static function orWhereHas($relation, $callback = null, $operator = '>=', $count = 1) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->orWhereHas($relation, $callback, $operator, $count); + } + + /** + * Add a relationship count / exists condition to the query with where clauses. + * + * @param string $relation + * @param \Closure|null $callback + * @return \Illuminate\Database\Eloquent\Builder|static + * @static + */ + public static function whereDoesntHave($relation, $callback = null) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->whereDoesntHave($relation, $callback); + } + + /** + * Add a relationship count / exists condition to the query with where clauses and an "or". + * + * @param string $relation + * @param \Closure|null $callback + * @return \Illuminate\Database\Eloquent\Builder|static + * @static + */ + public static function orWhereDoesntHave($relation, $callback = null) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->orWhereDoesntHave($relation, $callback); + } + + /** + * Add a polymorphic relationship count / exists condition to the query. + * + * @param string $relation + * @param string|array $types + * @param string $operator + * @param int $count + * @param string $boolean + * @param \Closure|null $callback + * @return \Illuminate\Database\Eloquent\Builder|static + * @static + */ + public static function hasMorph($relation, $types, $operator = '>=', $count = 1, $boolean = 'and', $callback = null) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->hasMorph($relation, $types, $operator, $count, $boolean, $callback); + } + + /** + * Add a polymorphic relationship count / exists condition to the query with an "or". + * + * @param string $relation + * @param string|array $types + * @param string $operator + * @param int $count + * @return \Illuminate\Database\Eloquent\Builder|static + * @static + */ + public static function orHasMorph($relation, $types, $operator = '>=', $count = 1) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->orHasMorph($relation, $types, $operator, $count); + } + + /** + * Add a polymorphic relationship count / exists condition to the query. + * + * @param string $relation + * @param string|array $types + * @param string $boolean + * @param \Closure|null $callback + * @return \Illuminate\Database\Eloquent\Builder|static + * @static + */ + public static function doesntHaveMorph($relation, $types, $boolean = 'and', $callback = null) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->doesntHaveMorph($relation, $types, $boolean, $callback); + } + + /** + * Add a polymorphic relationship count / exists condition to the query with an "or". + * + * @param string $relation + * @param string|array $types + * @return \Illuminate\Database\Eloquent\Builder|static + * @static + */ + public static function orDoesntHaveMorph($relation, $types) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->orDoesntHaveMorph($relation, $types); + } + + /** + * Add a polymorphic relationship count / exists condition to the query with where clauses. + * + * @param string $relation + * @param string|array $types + * @param \Closure|null $callback + * @param string $operator + * @param int $count + * @return \Illuminate\Database\Eloquent\Builder|static + * @static + */ + public static function whereHasMorph($relation, $types, $callback = null, $operator = '>=', $count = 1) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->whereHasMorph($relation, $types, $callback, $operator, $count); + } + + /** + * Add a polymorphic relationship count / exists condition to the query with where clauses and an "or". + * + * @param string $relation + * @param string|array $types + * @param \Closure|null $callback + * @param string $operator + * @param int $count + * @return \Illuminate\Database\Eloquent\Builder|static + * @static + */ + public static function orWhereHasMorph($relation, $types, $callback = null, $operator = '>=', $count = 1) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->orWhereHasMorph($relation, $types, $callback, $operator, $count); + } + + /** + * Add a polymorphic relationship count / exists condition to the query with where clauses. + * + * @param string $relation + * @param string|array $types + * @param \Closure|null $callback + * @return \Illuminate\Database\Eloquent\Builder|static + * @static + */ + public static function whereDoesntHaveMorph($relation, $types, $callback = null) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->whereDoesntHaveMorph($relation, $types, $callback); + } + + /** + * Add a polymorphic relationship count / exists condition to the query with where clauses and an "or". + * + * @param string $relation + * @param string|array $types + * @param \Closure|null $callback + * @return \Illuminate\Database\Eloquent\Builder|static + * @static + */ + public static function orWhereDoesntHaveMorph($relation, $types, $callback = null) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->orWhereDoesntHaveMorph($relation, $types, $callback); + } + + /** + * Add subselect queries to count the relations. + * + * @param mixed $relations + * @return \Illuminate\Database\Eloquent\Builder|static + * @static + */ + public static function withCount($relations) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->withCount($relations); + } + + /** + * Merge the where constraints from another query to the current query. + * + * @param \Illuminate\Database\Eloquent\Builder $from + * @return \Illuminate\Database\Eloquent\Builder|static + * @static + */ + public static function mergeConstraintsFrom($from) + { + /** @var \Illuminate\Database\Eloquent\Builder $instance */ + return $instance->mergeConstraintsFrom($from); + } + + /** + * Set the columns to be selected. + * + * @param array|mixed $columns + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function select($columns = []) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->select($columns); + } + + /** + * Add a subselect expression to the query. + * + * @param \Closure|$this|string $query + * @param string $as + * @return \Illuminate\Database\Query\Builder + * @throws \InvalidArgumentException + * @static + */ + public static function selectSub($query, $as) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->selectSub($query, $as); + } + + /** + * Add a new "raw" select expression to the query. + * + * @param string $expression + * @param array $bindings + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function selectRaw($expression, $bindings = []) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->selectRaw($expression, $bindings); + } + + /** + * Makes "from" fetch from a subquery. + * + * @param \Closure|\Illuminate\Database\Query\Builder|string $query + * @param string $as + * @return \Illuminate\Database\Query\Builder + * @throws \InvalidArgumentException + * @static + */ + public static function fromSub($query, $as) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->fromSub($query, $as); + } + + /** + * Add a raw from clause to the query. + * + * @param string $expression + * @param mixed $bindings + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function fromRaw($expression, $bindings = []) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->fromRaw($expression, $bindings); + } + + /** + * Add a new select column to the query. + * + * @param array|mixed $column + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function addSelect($column) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->addSelect($column); + } + + /** + * Force the query to only return distinct results. + * + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function distinct() + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->distinct(); + } + + /** + * Set the table which the query is targeting. + * + * @param \Closure|\Illuminate\Database\Query\Builder|string $table + * @param string|null $as + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function from($table, $as = null) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->from($table, $as); + } + + /** + * Add a join clause to the query. + * + * @param string $table + * @param \Closure|string $first + * @param string|null $operator + * @param string|null $second + * @param string $type + * @param bool $where + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function join($table, $first, $operator = null, $second = null, $type = 'inner', $where = false) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->join($table, $first, $operator, $second, $type, $where); + } + + /** + * Add a "join where" clause to the query. + * + * @param string $table + * @param \Closure|string $first + * @param string $operator + * @param string $second + * @param string $type + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function joinWhere($table, $first, $operator, $second, $type = 'inner') + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->joinWhere($table, $first, $operator, $second, $type); + } + + /** + * Add a subquery join clause to the query. + * + * @param \Closure|\Illuminate\Database\Query\Builder|string $query + * @param string $as + * @param \Closure|string $first + * @param string|null $operator + * @param string|null $second + * @param string $type + * @param bool $where + * @return \Illuminate\Database\Query\Builder + * @throws \InvalidArgumentException + * @static + */ + public static function joinSub($query, $as, $first, $operator = null, $second = null, $type = 'inner', $where = false) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->joinSub($query, $as, $first, $operator, $second, $type, $where); + } + + /** + * Add a left join to the query. + * + * @param string $table + * @param \Closure|string $first + * @param string|null $operator + * @param string|null $second + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function leftJoin($table, $first, $operator = null, $second = null) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->leftJoin($table, $first, $operator, $second); + } + + /** + * Add a "join where" clause to the query. + * + * @param string $table + * @param \Closure|string $first + * @param string $operator + * @param string $second + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function leftJoinWhere($table, $first, $operator, $second) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->leftJoinWhere($table, $first, $operator, $second); + } + + /** + * Add a subquery left join to the query. + * + * @param \Closure|\Illuminate\Database\Query\Builder|string $query + * @param string $as + * @param \Closure|string $first + * @param string|null $operator + * @param string|null $second + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function leftJoinSub($query, $as, $first, $operator = null, $second = null) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->leftJoinSub($query, $as, $first, $operator, $second); + } + + /** + * Add a right join to the query. + * + * @param string $table + * @param \Closure|string $first + * @param string|null $operator + * @param string|null $second + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function rightJoin($table, $first, $operator = null, $second = null) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->rightJoin($table, $first, $operator, $second); + } + + /** + * Add a "right join where" clause to the query. + * + * @param string $table + * @param \Closure|string $first + * @param string $operator + * @param string $second + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function rightJoinWhere($table, $first, $operator, $second) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->rightJoinWhere($table, $first, $operator, $second); + } + + /** + * Add a subquery right join to the query. + * + * @param \Closure|\Illuminate\Database\Query\Builder|string $query + * @param string $as + * @param \Closure|string $first + * @param string|null $operator + * @param string|null $second + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function rightJoinSub($query, $as, $first, $operator = null, $second = null) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->rightJoinSub($query, $as, $first, $operator, $second); + } + + /** + * Add a "cross join" clause to the query. + * + * @param string $table + * @param \Closure|string|null $first + * @param string|null $operator + * @param string|null $second + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function crossJoin($table, $first = null, $operator = null, $second = null) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->crossJoin($table, $first, $operator, $second); + } + + /** + * Merge an array of where clauses and bindings. + * + * @param array $wheres + * @param array $bindings + * @return void + * @static + */ + public static function mergeWheres($wheres, $bindings) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + $instance->mergeWheres($wheres, $bindings); + } + + /** + * Prepare the value and operator for a where clause. + * + * @param string $value + * @param string $operator + * @param bool $useDefault + * @return array + * @throws \InvalidArgumentException + * @static + */ + public static function prepareValueAndOperator($value, $operator, $useDefault = false) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->prepareValueAndOperator($value, $operator, $useDefault); + } + + /** + * Add a "where" clause comparing two columns to the query. + * + * @param string|array $first + * @param string|null $operator + * @param string|null $second + * @param string|null $boolean + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function whereColumn($first, $operator = null, $second = null, $boolean = 'and') + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->whereColumn($first, $operator, $second, $boolean); + } + + /** + * Add an "or where" clause comparing two columns to the query. + * + * @param string|array $first + * @param string|null $operator + * @param string|null $second + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function orWhereColumn($first, $operator = null, $second = null) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->orWhereColumn($first, $operator, $second); + } + + /** + * Add a raw where clause to the query. + * + * @param string $sql + * @param mixed $bindings + * @param string $boolean + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function whereRaw($sql, $bindings = [], $boolean = 'and') + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->whereRaw($sql, $bindings, $boolean); + } + + /** + * Add a raw or where clause to the query. + * + * @param string $sql + * @param mixed $bindings + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function orWhereRaw($sql, $bindings = []) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->orWhereRaw($sql, $bindings); + } + + /** + * Add a "where in" clause to the query. + * + * @param string $column + * @param mixed $values + * @param string $boolean + * @param bool $not + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function whereIn($column, $values, $boolean = 'and', $not = false) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->whereIn($column, $values, $boolean, $not); + } + + /** + * Add an "or where in" clause to the query. + * + * @param string $column + * @param mixed $values + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function orWhereIn($column, $values) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->orWhereIn($column, $values); + } + + /** + * Add a "where not in" clause to the query. + * + * @param string $column + * @param mixed $values + * @param string $boolean + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function whereNotIn($column, $values, $boolean = 'and') + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->whereNotIn($column, $values, $boolean); + } + + /** + * Add an "or where not in" clause to the query. + * + * @param string $column + * @param mixed $values + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function orWhereNotIn($column, $values) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->orWhereNotIn($column, $values); + } + + /** + * Add a "where in raw" clause for integer values to the query. + * + * @param string $column + * @param \Illuminate\Contracts\Support\Arrayable|array $values + * @param string $boolean + * @param bool $not + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function whereIntegerInRaw($column, $values, $boolean = 'and', $not = false) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->whereIntegerInRaw($column, $values, $boolean, $not); + } + + /** + * Add an "or where in raw" clause for integer values to the query. + * + * @param string $column + * @param \Illuminate\Contracts\Support\Arrayable|array $values + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function orWhereIntegerInRaw($column, $values) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->orWhereIntegerInRaw($column, $values); + } + + /** + * Add a "where not in raw" clause for integer values to the query. + * + * @param string $column + * @param \Illuminate\Contracts\Support\Arrayable|array $values + * @param string $boolean + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function whereIntegerNotInRaw($column, $values, $boolean = 'and') + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->whereIntegerNotInRaw($column, $values, $boolean); + } + + /** + * Add an "or where not in raw" clause for integer values to the query. + * + * @param string $column + * @param \Illuminate\Contracts\Support\Arrayable|array $values + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function orWhereIntegerNotInRaw($column, $values) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->orWhereIntegerNotInRaw($column, $values); + } + + /** + * Add a "where null" clause to the query. + * + * @param string|array $columns + * @param string $boolean + * @param bool $not + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function whereNull($columns, $boolean = 'and', $not = false) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->whereNull($columns, $boolean, $not); + } + + /** + * Add an "or where null" clause to the query. + * + * @param string $column + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function orWhereNull($column) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->orWhereNull($column); + } + + /** + * Add a "where not null" clause to the query. + * + * @param string|array $columns + * @param string $boolean + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function whereNotNull($columns, $boolean = 'and') + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->whereNotNull($columns, $boolean); + } + + /** + * Add a where between statement to the query. + * + * @param string $column + * @param array $values + * @param string $boolean + * @param bool $not + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function whereBetween($column, $values, $boolean = 'and', $not = false) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->whereBetween($column, $values, $boolean, $not); + } + + /** + * Add a where between statement using columns to the query. + * + * @param string $column + * @param array $values + * @param string $boolean + * @param bool $not + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function whereBetweenColumns($column, $values, $boolean = 'and', $not = false) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->whereBetweenColumns($column, $values, $boolean, $not); + } + + /** + * Add an or where between statement to the query. + * + * @param string $column + * @param array $values + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function orWhereBetween($column, $values) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->orWhereBetween($column, $values); + } + + /** + * Add an or where between statement using columns to the query. + * + * @param string $column + * @param array $values + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function orWhereBetweenColumns($column, $values) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->orWhereBetweenColumns($column, $values); + } + + /** + * Add a where not between statement to the query. + * + * @param string $column + * @param array $values + * @param string $boolean + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function whereNotBetween($column, $values, $boolean = 'and') + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->whereNotBetween($column, $values, $boolean); + } + + /** + * Add a where not between statement using columns to the query. + * + * @param string $column + * @param array $values + * @param string $boolean + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function whereNotBetweenColumns($column, $values, $boolean = 'and') + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->whereNotBetweenColumns($column, $values, $boolean); + } + + /** + * Add an or where not between statement to the query. + * + * @param string $column + * @param array $values + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function orWhereNotBetween($column, $values) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->orWhereNotBetween($column, $values); + } + + /** + * Add an or where not between statement using columns to the query. + * + * @param string $column + * @param array $values + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function orWhereNotBetweenColumns($column, $values) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->orWhereNotBetweenColumns($column, $values); + } + + /** + * Add an "or where not null" clause to the query. + * + * @param string $column + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function orWhereNotNull($column) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->orWhereNotNull($column); + } + + /** + * Add a "where date" statement to the query. + * + * @param string $column + * @param string $operator + * @param \DateTimeInterface|string|null $value + * @param string $boolean + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function whereDate($column, $operator, $value = null, $boolean = 'and') + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->whereDate($column, $operator, $value, $boolean); + } + + /** + * Add an "or where date" statement to the query. + * + * @param string $column + * @param string $operator + * @param \DateTimeInterface|string|null $value + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function orWhereDate($column, $operator, $value = null) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->orWhereDate($column, $operator, $value); + } + + /** + * Add a "where time" statement to the query. + * + * @param string $column + * @param string $operator + * @param \DateTimeInterface|string|null $value + * @param string $boolean + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function whereTime($column, $operator, $value = null, $boolean = 'and') + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->whereTime($column, $operator, $value, $boolean); + } + + /** + * Add an "or where time" statement to the query. + * + * @param string $column + * @param string $operator + * @param \DateTimeInterface|string|null $value + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function orWhereTime($column, $operator, $value = null) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->orWhereTime($column, $operator, $value); + } + + /** + * Add a "where day" statement to the query. + * + * @param string $column + * @param string $operator + * @param \DateTimeInterface|string|null $value + * @param string $boolean + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function whereDay($column, $operator, $value = null, $boolean = 'and') + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->whereDay($column, $operator, $value, $boolean); + } + + /** + * Add an "or where day" statement to the query. + * + * @param string $column + * @param string $operator + * @param \DateTimeInterface|string|null $value + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function orWhereDay($column, $operator, $value = null) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->orWhereDay($column, $operator, $value); + } + + /** + * Add a "where month" statement to the query. + * + * @param string $column + * @param string $operator + * @param \DateTimeInterface|string|null $value + * @param string $boolean + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function whereMonth($column, $operator, $value = null, $boolean = 'and') + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->whereMonth($column, $operator, $value, $boolean); + } + + /** + * Add an "or where month" statement to the query. + * + * @param string $column + * @param string $operator + * @param \DateTimeInterface|string|null $value + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function orWhereMonth($column, $operator, $value = null) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->orWhereMonth($column, $operator, $value); + } + + /** + * Add a "where year" statement to the query. + * + * @param string $column + * @param string $operator + * @param \DateTimeInterface|string|int|null $value + * @param string $boolean + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function whereYear($column, $operator, $value = null, $boolean = 'and') + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->whereYear($column, $operator, $value, $boolean); + } + + /** + * Add an "or where year" statement to the query. + * + * @param string $column + * @param string $operator + * @param \DateTimeInterface|string|int|null $value + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function orWhereYear($column, $operator, $value = null) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->orWhereYear($column, $operator, $value); + } + + /** + * Add a nested where statement to the query. + * + * @param \Closure $callback + * @param string $boolean + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function whereNested($callback, $boolean = 'and') + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->whereNested($callback, $boolean); + } + + /** + * Create a new query instance for nested where condition. + * + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function forNestedWhere() + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->forNestedWhere(); + } + + /** + * Add another query builder as a nested where to the query builder. + * + * @param \Illuminate\Database\Query\Builder $query + * @param string $boolean + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function addNestedWhereQuery($query, $boolean = 'and') + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->addNestedWhereQuery($query, $boolean); + } + + /** + * Add an exists clause to the query. + * + * @param \Closure $callback + * @param string $boolean + * @param bool $not + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function whereExists($callback, $boolean = 'and', $not = false) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->whereExists($callback, $boolean, $not); + } + + /** + * Add an or exists clause to the query. + * + * @param \Closure $callback + * @param bool $not + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function orWhereExists($callback, $not = false) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->orWhereExists($callback, $not); + } + + /** + * Add a where not exists clause to the query. + * + * @param \Closure $callback + * @param string $boolean + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function whereNotExists($callback, $boolean = 'and') + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->whereNotExists($callback, $boolean); + } + + /** + * Add a where not exists clause to the query. + * + * @param \Closure $callback + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function orWhereNotExists($callback) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->orWhereNotExists($callback); + } + + /** + * Add an exists clause to the query. + * + * @param \Illuminate\Database\Query\Builder $query + * @param string $boolean + * @param bool $not + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function addWhereExistsQuery($query, $boolean = 'and', $not = false) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->addWhereExistsQuery($query, $boolean, $not); + } + + /** + * Adds a where condition using row values. + * + * @param array $columns + * @param string $operator + * @param array $values + * @param string $boolean + * @return \Illuminate\Database\Query\Builder + * @throws \InvalidArgumentException + * @static + */ + public static function whereRowValues($columns, $operator, $values, $boolean = 'and') + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->whereRowValues($columns, $operator, $values, $boolean); + } + + /** + * Adds an or where condition using row values. + * + * @param array $columns + * @param string $operator + * @param array $values + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function orWhereRowValues($columns, $operator, $values) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->orWhereRowValues($columns, $operator, $values); + } + + /** + * Add a "where JSON contains" clause to the query. + * + * @param string $column + * @param mixed $value + * @param string $boolean + * @param bool $not + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function whereJsonContains($column, $value, $boolean = 'and', $not = false) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->whereJsonContains($column, $value, $boolean, $not); + } + + /** + * Add an "or where JSON contains" clause to the query. + * + * @param string $column + * @param mixed $value + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function orWhereJsonContains($column, $value) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->orWhereJsonContains($column, $value); + } + + /** + * Add a "where JSON not contains" clause to the query. + * + * @param string $column + * @param mixed $value + * @param string $boolean + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function whereJsonDoesntContain($column, $value, $boolean = 'and') + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->whereJsonDoesntContain($column, $value, $boolean); + } + + /** + * Add an "or where JSON not contains" clause to the query. + * + * @param string $column + * @param mixed $value + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function orWhereJsonDoesntContain($column, $value) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->orWhereJsonDoesntContain($column, $value); + } + + /** + * Add a "where JSON length" clause to the query. + * + * @param string $column + * @param mixed $operator + * @param mixed $value + * @param string $boolean + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function whereJsonLength($column, $operator, $value = null, $boolean = 'and') + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->whereJsonLength($column, $operator, $value, $boolean); + } + + /** + * Add an "or where JSON length" clause to the query. + * + * @param string $column + * @param mixed $operator + * @param mixed $value + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function orWhereJsonLength($column, $operator, $value = null) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->orWhereJsonLength($column, $operator, $value); + } + + /** + * Handles dynamic "where" clauses to the query. + * + * @param string $method + * @param array $parameters + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function dynamicWhere($method, $parameters) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->dynamicWhere($method, $parameters); + } + + /** + * Add a "group by" clause to the query. + * + * @param array|string $groups + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function groupBy(...$groups) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->groupBy(...$groups); + } + + /** + * Add a raw groupBy clause to the query. + * + * @param string $sql + * @param array $bindings + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function groupByRaw($sql, $bindings = []) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->groupByRaw($sql, $bindings); + } + + /** + * Add a "having" clause to the query. + * + * @param string $column + * @param string|null $operator + * @param string|null $value + * @param string $boolean + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function having($column, $operator = null, $value = null, $boolean = 'and') + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->having($column, $operator, $value, $boolean); + } + + /** + * Add an "or having" clause to the query. + * + * @param string $column + * @param string|null $operator + * @param string|null $value + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function orHaving($column, $operator = null, $value = null) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->orHaving($column, $operator, $value); + } + + /** + * Add a "having between " clause to the query. + * + * @param string $column + * @param array $values + * @param string $boolean + * @param bool $not + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function havingBetween($column, $values, $boolean = 'and', $not = false) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->havingBetween($column, $values, $boolean, $not); + } + + /** + * Add a raw having clause to the query. + * + * @param string $sql + * @param array $bindings + * @param string $boolean + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function havingRaw($sql, $bindings = [], $boolean = 'and') + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->havingRaw($sql, $bindings, $boolean); + } + + /** + * Add a raw or having clause to the query. + * + * @param string $sql + * @param array $bindings + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function orHavingRaw($sql, $bindings = []) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->orHavingRaw($sql, $bindings); + } + + /** + * Add an "order by" clause to the query. + * + * @param \Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Query\Expression|string $column + * @param string $direction + * @return \Illuminate\Database\Query\Builder + * @throws \InvalidArgumentException + * @static + */ + public static function orderBy($column, $direction = 'asc') + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->orderBy($column, $direction); + } + + /** + * Add a descending "order by" clause to the query. + * + * @param string $column + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function orderByDesc($column) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->orderByDesc($column); + } + + /** + * Put the query's results in random order. + * + * @param string $seed + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function inRandomOrder($seed = '') + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->inRandomOrder($seed); + } + + /** + * Add a raw "order by" clause to the query. + * + * @param string $sql + * @param array $bindings + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function orderByRaw($sql, $bindings = []) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->orderByRaw($sql, $bindings); + } + + /** + * Alias to set the "offset" value of the query. + * + * @param int $value + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function skip($value) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->skip($value); + } + + /** + * Set the "offset" value of the query. + * + * @param int $value + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function offset($value) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->offset($value); + } + + /** + * Alias to set the "limit" value of the query. + * + * @param int $value + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function take($value) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->take($value); + } + + /** + * Set the "limit" value of the query. + * + * @param int $value + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function limit($value) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->limit($value); + } + + /** + * Set the limit and offset for a given page. + * + * @param int $page + * @param int $perPage + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function forPage($page, $perPage = 15) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->forPage($page, $perPage); + } + + /** + * Constrain the query to the previous "page" of results before a given ID. + * + * @param int $perPage + * @param int|null $lastId + * @param string $column + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function forPageBeforeId($perPage = 15, $lastId = 0, $column = 'id') + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->forPageBeforeId($perPage, $lastId, $column); + } + + /** + * Constrain the query to the next "page" of results after a given ID. + * + * @param int $perPage + * @param int|null $lastId + * @param string $column + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function forPageAfterId($perPage = 15, $lastId = 0, $column = 'id') + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->forPageAfterId($perPage, $lastId, $column); + } + + /** + * Remove all existing orders and optionally add a new order. + * + * @param string|null $column + * @param string $direction + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function reorder($column = null, $direction = 'asc') + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->reorder($column, $direction); + } + + /** + * Add a union statement to the query. + * + * @param \Illuminate\Database\Query\Builder|\Closure $query + * @param bool $all + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function union($query, $all = false) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->union($query, $all); + } + + /** + * Add a union all statement to the query. + * + * @param \Illuminate\Database\Query\Builder|\Closure $query + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function unionAll($query) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->unionAll($query); + } + + /** + * Lock the selected rows in the table. + * + * @param string|bool $value + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function lock($value = true) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->lock($value); + } + + /** + * Lock the selected rows in the table for updating. + * + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function lockForUpdate() + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->lockForUpdate(); + } + + /** + * Share lock the selected rows in the table. + * + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function sharedLock() + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->sharedLock(); + } + + /** + * Get the SQL representation of the query. + * + * @return string + * @static + */ + public static function toSql() + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->toSql(); + } + + /** + * Get the count of the total records for the paginator. + * + * @param array $columns + * @return int + * @static + */ + public static function getCountForPagination($columns = []) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->getCountForPagination($columns); + } + + /** + * Concatenate values of a given column as a string. + * + * @param string $column + * @param string $glue + * @return string + * @static + */ + public static function implode($column, $glue = '') + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->implode($column, $glue); + } + + /** + * Determine if any rows exist for the current query. + * + * @return bool + * @static + */ + public static function exists() + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->exists(); + } + + /** + * Determine if no rows exist for the current query. + * + * @return bool + * @static + */ + public static function doesntExist() + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->doesntExist(); + } + + /** + * Execute the given callback if no rows exist for the current query. + * + * @param \Closure $callback + * @return mixed + * @static + */ + public static function existsOr($callback) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->existsOr($callback); + } + + /** + * Execute the given callback if rows exist for the current query. + * + * @param \Closure $callback + * @return mixed + * @static + */ + public static function doesntExistOr($callback) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->doesntExistOr($callback); + } + + /** + * Retrieve the "count" result of the query. + * + * @param string $columns + * @return int + * @static + */ + public static function count($columns = '*') + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->count($columns); + } + + /** + * Retrieve the minimum value of a given column. + * + * @param string $column + * @return mixed + * @static + */ + public static function min($column) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->min($column); + } + + /** + * Retrieve the maximum value of a given column. + * + * @param string $column + * @return mixed + * @static + */ + public static function max($column) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->max($column); + } + + /** + * Retrieve the sum of the values of a given column. + * + * @param string $column + * @return mixed + * @static + */ + public static function sum($column) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->sum($column); + } + + /** + * Retrieve the average of the values of a given column. + * + * @param string $column + * @return mixed + * @static + */ + public static function avg($column) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->avg($column); + } + + /** + * Alias for the "avg" method. + * + * @param string $column + * @return mixed + * @static + */ + public static function average($column) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->average($column); + } + + /** + * Execute an aggregate function on the database. + * + * @param string $function + * @param array $columns + * @return mixed + * @static + */ + public static function aggregate($function, $columns = []) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->aggregate($function, $columns); + } + + /** + * Execute a numeric aggregate function on the database. + * + * @param string $function + * @param array $columns + * @return float|int + * @static + */ + public static function numericAggregate($function, $columns = []) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->numericAggregate($function, $columns); + } + + /** + * Insert a new record into the database. + * + * @param array $values + * @return bool + * @static + */ + public static function insert($values) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->insert($values); + } + + /** + * Insert a new record into the database while ignoring errors. + * + * @param array $values + * @return int + * @static + */ + public static function insertOrIgnore($values) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->insertOrIgnore($values); + } + + /** + * Insert a new record and get the value of the primary key. + * + * @param array $values + * @param string|null $sequence + * @return int + * @static + */ + public static function insertGetId($values, $sequence = null) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->insertGetId($values, $sequence); + } + + /** + * Insert new records into the table using a subquery. + * + * @param array $columns + * @param \Closure|\Illuminate\Database\Query\Builder|string $query + * @return int + * @static + */ + public static function insertUsing($columns, $query) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->insertUsing($columns, $query); + } + + /** + * Insert or update a record matching the attributes, and fill it with values. + * + * @param array $attributes + * @param array $values + * @return bool + * @static + */ + public static function updateOrInsert($attributes, $values = []) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->updateOrInsert($attributes, $values); + } + + /** + * Run a truncate statement on the table. + * + * @return void + * @static + */ + public static function truncate() + { + /** @var \Illuminate\Database\Query\Builder $instance */ + $instance->truncate(); + } + + /** + * Create a raw database expression. + * + * @param mixed $value + * @return \Illuminate\Database\Query\Expression + * @static + */ + public static function raw($value) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->raw($value); + } + + /** + * Get the current query value bindings in a flattened array. + * + * @return array + * @static + */ + public static function getBindings() + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->getBindings(); + } + + /** + * Get the raw array of bindings. + * + * @return array + * @static + */ + public static function getRawBindings() + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->getRawBindings(); + } + + /** + * Set the bindings on the query builder. + * + * @param array $bindings + * @param string $type + * @return \Illuminate\Database\Query\Builder + * @throws \InvalidArgumentException + * @static + */ + public static function setBindings($bindings, $type = 'where') + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->setBindings($bindings, $type); + } + + /** + * Add a binding to the query. + * + * @param mixed $value + * @param string $type + * @return \Illuminate\Database\Query\Builder + * @throws \InvalidArgumentException + * @static + */ + public static function addBinding($value, $type = 'where') + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->addBinding($value, $type); + } + + /** + * Merge an array of bindings into our bindings. + * + * @param \Illuminate\Database\Query\Builder $query + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function mergeBindings($query) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->mergeBindings($query); + } + + /** + * Get the database query processor instance. + * + * @return \Illuminate\Database\Query\Processors\Processor + * @static + */ + public static function getProcessor() + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->getProcessor(); + } + + /** + * Get the query grammar instance. + * + * @return \Illuminate\Database\Query\Grammars\Grammar + * @static + */ + public static function getGrammar() + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->getGrammar(); + } + + /** + * Use the write pdo for query. + * + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function useWritePdo() + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->useWritePdo(); + } + + /** + * Clone the query without the given properties. + * + * @param array $properties + * @return static + * @static + */ + public static function cloneWithout($properties) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->cloneWithout($properties); + } + + /** + * Clone the query without the given bindings. + * + * @param array $except + * @return static + * @static + */ + public static function cloneWithoutBindings($except) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->cloneWithoutBindings($except); + } + + /** + * Dump the current SQL and bindings. + * + * @return \Illuminate\Database\Query\Builder + * @static + */ + public static function dump() + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->dump(); + } + + /** + * Die and dump the current SQL and bindings. + * + * @return void + * @static + */ + public static function dd() + { + /** @var \Illuminate\Database\Query\Builder $instance */ + $instance->dd(); + } + + /** + * Register a custom macro. + * + * @param string $name + * @param object|callable $macro + * @return void + * @static + */ + public static function macro($name, $macro) + { + \Illuminate\Database\Query\Builder::macro($name, $macro); + } + + /** + * Mix another object into the class. + * + * @param object $mixin + * @param bool $replace + * @return void + * @throws \ReflectionException + * @static + */ + public static function mixin($mixin, $replace = true) + { + \Illuminate\Database\Query\Builder::mixin($mixin, $replace); + } + + /** + * Dynamically handle calls to the class. + * + * @param string $method + * @param array $parameters + * @return mixed + * @throws \BadMethodCallException + * @static + */ + public static function macroCall($method, $parameters) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->macroCall($method, $parameters); + } + } + class Event extends \Illuminate\Support\Facades\Event {} + class File extends \Illuminate\Support\Facades\File {} + class Gate extends \Illuminate\Support\Facades\Gate {} + class Hash extends \Illuminate\Support\Facades\Hash {} + class Http extends \Illuminate\Support\Facades\Http {} + class Lang extends \Illuminate\Support\Facades\Lang {} + class Log extends \Illuminate\Support\Facades\Log {} + class Mail extends \Illuminate\Support\Facades\Mail {} + class Notification extends \Illuminate\Support\Facades\Notification {} + class Password extends \Illuminate\Support\Facades\Password {} + class Queue extends \Illuminate\Support\Facades\Queue {} + class Redirect extends \Illuminate\Support\Facades\Redirect {} + class Request extends \Illuminate\Support\Facades\Request {} + class Response extends \Illuminate\Support\Facades\Response {} + class Route extends \Illuminate\Support\Facades\Route {} + class Schema extends \Illuminate\Support\Facades\Schema {} + class Session extends \Illuminate\Support\Facades\Session {} + class Storage extends \Illuminate\Support\Facades\Storage {} + class Str extends \Illuminate\Support\Str {} + class URL extends \Illuminate\Support\Facades\URL {} + class Validator extends \Illuminate\Support\Facades\Validator {} + class View extends \Illuminate\Support\Facades\View {} + class Debugbar extends \Barryvdh\Debugbar\Facade {} + class Flare extends \Facade\Ignition\Facades\Flare {} + +} + + + + diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php new file mode 100644 index 0000000..d8bc1d2 --- /dev/null +++ b/app/Console/Kernel.php @@ -0,0 +1,32 @@ +command('inspire')->hourly(); + } + + /** + * Register the commands for the application. + * + * @return void + */ + protected function commands() + { + $this->load(__DIR__.'/Commands'); + + require base_path('routes/console.php'); + } +} diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php new file mode 100644 index 0000000..82a37e4 --- /dev/null +++ b/app/Exceptions/Handler.php @@ -0,0 +1,50 @@ +, \Psr\Log\LogLevel::*> + */ + protected $levels = [ + // + ]; + + /** + * A list of the exception types that are not reported. + * + * @var array> + */ + protected $dontReport = [ + // + ]; + + /** + * A list of the inputs that are never flashed to the session on validation exceptions. + * + * @var array + */ + protected $dontFlash = [ + 'current_password', + 'password', + 'password_confirmation', + ]; + + /** + * Register the exception handling callbacks for the application. + * + * @return void + */ + public function register() + { + $this->reportable(function (Throwable $e) { + // + }); + } +} diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php new file mode 100644 index 0000000..a0a2a8a --- /dev/null +++ b/app/Http/Controllers/Controller.php @@ -0,0 +1,13 @@ + + */ + protected $middleware = [ + // \App\Http\Middleware\TrustHosts::class, + \App\Http\Middleware\TrustProxies::class, + \Illuminate\Http\Middleware\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\View\Middleware\ShareErrorsFromSession::class, + \App\Http\Middleware\VerifyCsrfToken::class, + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + + 'api' => [ + // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, + 'throttle:api', + \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, + 'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::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, + ]; +} diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php new file mode 100644 index 0000000..704089a --- /dev/null +++ b/app/Http/Middleware/Authenticate.php @@ -0,0 +1,21 @@ +expectsJson()) { + return route('login'); + } + } +} diff --git a/app/Http/Middleware/CheckForMaintenanceMode.php b/app/Http/Middleware/CheckForMaintenanceMode.php new file mode 100644 index 0000000..35b9824 --- /dev/null +++ b/app/Http/Middleware/CheckForMaintenanceMode.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/app/Http/Middleware/PreventRequestsDuringMaintenance.php b/app/Http/Middleware/PreventRequestsDuringMaintenance.php new file mode 100644 index 0000000..74cbd9a --- /dev/null +++ b/app/Http/Middleware/PreventRequestsDuringMaintenance.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/app/Http/Middleware/RedirectIfAuthenticated.php b/app/Http/Middleware/RedirectIfAuthenticated.php new file mode 100644 index 0000000..a2813a0 --- /dev/null +++ b/app/Http/Middleware/RedirectIfAuthenticated.php @@ -0,0 +1,32 @@ +check()) { + return redirect(RouteServiceProvider::HOME); + } + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/SetUser.php b/app/Http/Middleware/SetUser.php new file mode 100644 index 0000000..9674fa8 --- /dev/null +++ b/app/Http/Middleware/SetUser.php @@ -0,0 +1,43 @@ +setLocale('de'); + + /** @var User $currentUser */ + $currentUser = $request->user(); + if(is_null($currentUser)) { + $currentUser = auth()->loginUsingId('8d306ec3-26ee-4bc3-918b-c8f79a3c3315'); + } + + $currentUser->load(['profile', 'groups.permissions']); + if(!$currentUser->isInGroup(['Guest'])) { + $currentUser->lastactive_at = now(); + $currentUser->lastactive_ip = $request->ip(); + $currentUser->save(); + } + + /** @var Collection forumPermissions */ + $currentUser->forumPermissions = collect(); + $currentUser->groups->sortBy('priority')->map(function(Group $group) use($currentUser) { + $group->permissions->map(function(Permission $permission) use($currentUser) { + $currentUser->forumPermissions->put($permission->forum_uuid, $permission); + }); + }); + + view()->share('currentUser', $currentUser); + + return $next($request); + } +} diff --git a/app/Http/Middleware/TrimStrings.php b/app/Http/Middleware/TrimStrings.php new file mode 100644 index 0000000..88cadca --- /dev/null +++ b/app/Http/Middleware/TrimStrings.php @@ -0,0 +1,19 @@ + + */ + protected $except = [ + 'current_password', + 'password', + 'password_confirmation', + ]; +} diff --git a/app/Http/Middleware/TrustHosts.php b/app/Http/Middleware/TrustHosts.php new file mode 100644 index 0000000..7186414 --- /dev/null +++ b/app/Http/Middleware/TrustHosts.php @@ -0,0 +1,20 @@ + + */ + public function hosts() + { + return [ + $this->allSubdomainsOfApplicationUrl(), + ]; + } +} diff --git a/app/Http/Middleware/TrustProxies.php b/app/Http/Middleware/TrustProxies.php new file mode 100644 index 0000000..3391630 --- /dev/null +++ b/app/Http/Middleware/TrustProxies.php @@ -0,0 +1,28 @@ +|string|null + */ + protected $proxies; + + /** + * The headers that should be used to detect proxies. + * + * @var int + */ + protected $headers = + Request::HEADER_X_FORWARDED_FOR | + Request::HEADER_X_FORWARDED_HOST | + Request::HEADER_X_FORWARDED_PORT | + Request::HEADER_X_FORWARDED_PROTO | + Request::HEADER_X_FORWARDED_AWS_ELB; +} diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php new file mode 100644 index 0000000..9e86521 --- /dev/null +++ b/app/Http/Middleware/VerifyCsrfToken.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/app/Modules/Admin/Middleware/CheckAdmin.php b/app/Modules/Admin/Middleware/CheckAdmin.php new file mode 100644 index 0000000..5d592d0 --- /dev/null +++ b/app/Modules/Admin/Middleware/CheckAdmin.php @@ -0,0 +1,27 @@ +user()->isInGroup(['Administrator'])) { + return redirect()->route('index'); + } + + return $next($request); + } +} diff --git a/app/Modules/Admin/ServiceProvider.php b/app/Modules/Admin/ServiceProvider.php new file mode 100644 index 0000000..2934b2c --- /dev/null +++ b/app/Modules/Admin/ServiceProvider.php @@ -0,0 +1,21 @@ +view->make('admin::dashboard', [ + 'active' => 'dashboard' + ]); + } +} diff --git a/app/Modules/Admin/UI/Web/Views/Layouts/master.blade.php b/app/Modules/Admin/UI/Web/Views/Layouts/master.blade.php new file mode 100644 index 0000000..899fc2f --- /dev/null +++ b/app/Modules/Admin/UI/Web/Views/Layouts/master.blade.php @@ -0,0 +1,46 @@ + + + + + + + Purpleload + + + @yield('pagecss') + + + + @yield('content') + + + + + @yield('pagejs') + + diff --git a/app/Modules/Admin/UI/Web/Views/dashboard.blade.php b/app/Modules/Admin/UI/Web/Views/dashboard.blade.php new file mode 100644 index 0000000..1d42671 --- /dev/null +++ b/app/Modules/Admin/UI/Web/Views/dashboard.blade.php @@ -0,0 +1 @@ +@extends('admin::Layouts.master') diff --git a/app/Modules/Admin/UI/Web/routes.php b/app/Modules/Admin/UI/Web/routes.php new file mode 100644 index 0000000..1fa007f --- /dev/null +++ b/app/Modules/Admin/UI/Web/routes.php @@ -0,0 +1,3 @@ +name('admin'); diff --git a/app/Modules/Admin/module.php b/app/Modules/Admin/module.php new file mode 100644 index 0000000..abd6d66 --- /dev/null +++ b/app/Modules/Admin/module.php @@ -0,0 +1,13 @@ + 'LaraBB\Admin\UI\Web\Handlers', + 'middleware' => [ + 'web', + 'auth', + CheckAdmin::class + ], + 'prefix' => 'admin' +], __DIR__ . '/UI/Web/routes.php'); diff --git a/app/Modules/Application/Button.php b/app/Modules/Application/Button.php new file mode 100644 index 0000000..4251418 --- /dev/null +++ b/app/Modules/Application/Button.php @@ -0,0 +1,532 @@ +text($strText); + $this->arrData = []; + } + + /** + * @param string $strText + * @return Button + */ + public function text(string $strText): static + { + $this->strText = $strText; + + return $this; + } + + /** + * @param bool $boolAutoFocus + * @return Button + */ + public function autofocus(bool $boolAutoFocus = true): static + { + $this->boolAutoFocus = $boolAutoFocus; + + return $this; + } + + /** + * @param bool $boolDisabled + * @return Button + */ + public function disabled(bool $boolDisabled = true): static + { + $this->boolDisabled = $boolDisabled; + + return $this; + } + + /** + * @param string $strFormId + * @return Button + */ + public function form(string $strFormId): static + { + $this->strFormId = $strFormId; + + return $this; + } + + /** + * @param string $strFormAction + * @return Button + */ + public function formaction(string $strFormAction): static + { + $this->strFormAction = $strFormAction; + + return $this; + } + + /** + * @param string $strFormEncType + * @return $this + */ + public function formenctype(string $strFormEncType): static + { + $this->strFormEncType = $strFormEncType; + + return $this; + } + + /** + * @param string $strFormMethod + * @return Button + */ + public function formmethod(string $strFormMethod): static + { + $this->strFormMethod = $strFormMethod; + + return $this; + } + + /** + * @param bool $boolFormNoValidate + * @return Button + */ + public function formnovalidate(bool $boolFormNoValidate = true): static + { + $this->boolFormNoValidate = $boolFormNoValidate; + + return $this; + } + + /** + * @param string $strFormTarget + * @return Button + */ + public function formtarget(string $strFormTarget): static + { + $this->strFormTarget = $strFormTarget; + + return $this; + } + + /** + * @param string $strId + * @return Button + */ + public function id(string $strId): static + { + $this->strId = $strId; + + return $this; + } + + /** + * @param string $strClass + * @return Button + */ + public function class(string $strClass): static + { + $this->strClass = $strClass; + + return $this; + } + + /** + * @param string $strType + * @return Button + */ + public function type(string $strType): static + { + $this->strType = $strType; + + return $this; + } + + /** + * @param string $strName + * @param string $strValue + * @return $this + */ + public function data(string $strName, string $strValue): static + { + $this->arrData[$strName] = $strValue; + + return $this; + } + + /** + * @return string|null + */ + public function getData(): ?string + { + if (count($this->arrData)) { + $strRet = ''; + foreach ($this->arrData as $strIndex => $strValue) { + $strRet .= sprintf(' data-%s="%s" ', $strIndex, $strValue); + } + return $strRet; + } + return ''; + } + + /** + * @param string $strName + * @return Button + */ + public function name(string $strName): static + { + $this->strName = $strName; + + return $this; + } + + /** + * @param string $strValue + * @return Button + */ + public function value(string $strValue): static + { + $this->strValue = $strValue; + + return $this; + } + + /** + * @param string $strDropDirection + * @param array $arrDropdownItems + * @return Button + */ + public function dropdown(array $arrDropdownItems, string $strDropDirection = 'down'): static + { + $this->boolDropdown = true; + $this->strDropDirection = $strDropDirection === 'down' ? null : $strDropDirection; + $this->arrDropdownItems = $arrDropdownItems; + + return $this; + } + + /** + * @param string $strIcon + * @return Button + */ + public function icon(string $strIcon): static + { + $this->strIcon = $strIcon; + + return $this; + } + + /** + * @param string $strHref + * @return $this + */ + public function href(string $strHref): static + { + $this->strHref = $strHref; + + return $this; + } + + /** + * @param string $strTarget + * @return $this + */ + public function target(string $strTarget): static + { + $this->strTarget = $strTarget; + return $this; + } + + /** + * @param $boolPermission + * @return $this + */ + public function permission($boolPermission): static + { + $this->boolPermission = $boolPermission; + return $this; + } + + /** + * @return string|null + */ + public function getText(): ?string + { + return $this->strText; + } + + /** + * @return bool + */ + public function getAutoFocus(): bool + { + return $this->boolAutoFocus; + } + + /** + * @return bool + */ + public function getDisabled(): bool + { + return $this->boolDisabled; + } + + /** + * @return string|null + */ + public function getForm(): ?string + { + return $this->strFormId; + } + + /** + * @return string|null + */ + public function getFormAction(): ?string + { + return $this->strFormAction; + } + + /** + * @return string|null + */ + public function getFormEnctype(): ?string + { + return $this->strFormEncType; + } + + /** + * @return string|null + */ + public function getFormMethod(): ?string + { + return $this->strFormMethod; + } + + /** + * @return bool|null + */ + public function getFormNoValidate(): ?bool + { + return $this->boolFormNoValidate; + } + + /** + * @return string|null + */ + public function getFormTarget(): ?string + { + return $this->strFormTarget; + } + + /** + * @return string|null + */ + public function getName(): ?string + { + return $this->strName; + } + + /** + * @return string|null + */ + public function getType(): ?string + { + return $this->strType; + } + + /** + * @return string|null + */ + public function getValue(): ?string + { + return $this->strValue; + } + + /** + * @return string|null + */ + public function getClass(): ?string + { + return $this->strClass; + } + + /** + * @return string|null + */ + public function getId(): ?string + { + return $this->strId; + } + + /** + * @return string|null + */ + public function getHref(): ?string + { + return $this->strHref; + } + + /** + * @return string|null + */ + public function getTarget(): ?string + { + return $this->strTarget; + } + + + /** + * @return bool + */ + public function hasDropdown(): bool + { + return $this->boolDropdown; + } + + /** + * @return string|null + */ + public function getDropDirection(): ?string + { + return $this->strDropDirection; + } + + /** + * @return array + */ + public function getDropdownItems(): array + { + return $this->arrDropdownItems; + } + + /** + * @return string|null + */ + public function getIcon(): ?string + { + return $this->strIcon; + } + + /** + * @return bool|null + */ + public function getPermission(): ?bool + { + return $this->boolPermission; + } + + /** + * @return string + */ + public function render(): string + { + return view('components.atomic.button', [ + 'btn' => $this + ])->render(); + } + + /** + * @return string + */ + public function __toString() + { + return $this->render(); + } +} diff --git a/app/Modules/Application/Config/module.php b/app/Modules/Application/Config/module.php new file mode 100644 index 0000000..ad820d3 --- /dev/null +++ b/app/Modules/Application/Config/module.php @@ -0,0 +1,102 @@ + [ + 'layout' => 'fixed' + ], + 'validation' => [ + 'rules' => [ + /** User */ + 'user' => [ + 'uuid' => [ + 'required', + 'uuid', + 'exists:users,uuid', + ], + 'username' => [ + 'required', + 'unique:users,username' + ], + 'email' => [ + 'required', + 'email' + ], + 'password' => [ + 'nullable', + 'confirmed', + 'min:8', + ], + 'groups' => [ + 'required', + ], + ], + + /** Kategorien */ + 'categories' => [ + 'uuid' => [ + 'required', + 'uuid', + 'exists:categories,uuid' + ], + 'title' => [ + 'required', + 'max:255' + ], + 'slug' => [ + 'required', + 'exists:categories,slug', + 'max:255' + ] + ], + 'forum' => [ + '' + ] + ], + 'messages' => [ + /** User */ + 'user' => [ + 'uuid' => [ + 'required' => 'Es wurde keine UUID übergeben.', + 'uuid' => 'Die übergebene UUID ist ungültig.', + 'exists' => 'Der Benutzer existiert nicht.', + ], + 'username' => [ + 'required' => 'Bitte geben Sie einen Benutzernamen an!', + 'unique' => 'Dieser Benutzername ist bereits vergeben.' + ], + 'email' => [ + 'required' => 'Bitte geben Sie eine E-Mail Adresse an!', + 'email' => 'Die angegebene E-Mail Adresse hat ein ungültiges Format.', + ], + 'password' => [ + 'required' => 'Bitte geben Sie ein Passwort an!', + 'confirmed' => 'Bitte bestätigen Sie das angegebene Passwort.', + 'min' => 'Das angegebene Passwort muss mindestens :min Zeichen lang sein.', + ], + 'groups' => [ + 'required' => 'Bitte wählen Sie mindestens eine Benutzergruppe aus.', + ], + 'groups.*' => [ + 'in' => 'Die :index Benutzergruppe ist ungültig.' + ] + ], + + /** Kategorien */ + 'categories' => [ + 'uuid' => [ + 'required' => 'Es wurde keine UUID übergeben.', + 'uuid' => 'Die übergebene UUID ist ungültig.', + 'exists' => 'Diese Kategorie existiert nicht.', + ], + 'title' => [ + 'required' => 'Bitte geben Sie eine Bezeichnung an!', + 'max' => 'Die angegebene Bezeichnung ist zu lang (max. :max Zeichen).' + ], + 'slug' => [ + 'required' => __('Please specify a category.'), + 'exists' => __('The desired category does not exist.'), + 'max' => 'Die angegebene URL ist zu lang (max. :max Zeichen).' + ] + ] + ] + ] +]; diff --git a/app/Modules/Application/ServiceProvider.php b/app/Modules/Application/ServiceProvider.php new file mode 100644 index 0000000..5acc9ea --- /dev/null +++ b/app/Modules/Application/ServiceProvider.php @@ -0,0 +1,22 @@ + $rules]; + } + + // Baue neues Regel-Array mit Regel-Bezeichner als Indizes auf + $rulesWithNameIndices = []; + foreach($rules as $field => $fieldRules) { + foreach($fieldRules as $index => $rule) { + $ruleWithParamters = explode(':', $rule); + $ruleIndex = count($ruleWithParamters) > 1 ? $ruleWithParamters[0] : $rule; + + $rulesWithNameIndices[$field][$ruleIndex] = $rule; + } + } + + return collect($rulesWithNameIndices)->except($except)->map(function($rules) { + return implode('|', $rules); + })->toArray(); + } + + /** + * @param string $identifier + * @param array $except + * @return array + */ + public function getMessages(string $identifier, array $except = []): array + { + $messages = config('application.validation.messages.' . $identifier); + $parts = explode('.', $identifier); + $field = $parts[1] ?? null; + + return collect($messages)->except($except)->mapWithKeys(function($message, $key) use($field) { + // Messages für einzelnes Feld wurde angefordert ($mixedMessage = string) + if(!is_null($field)) { + return [$field . '.' . $key => $message]; + } + + $messageItems = []; + foreach($message as $messageKey => $messageValue) { + $messageItems[$key . '.' . $messageKey] = $messageValue; + } + + return $messageItems; + })->toArray(); + } +} diff --git a/app/Modules/Application/helpers.php b/app/Modules/Application/helpers.php new file mode 100644 index 0000000..a721b74 --- /dev/null +++ b/app/Modules/Application/helpers.php @@ -0,0 +1,14 @@ +findCategoryTask->byUuid($request->post('uuid')); + try { + $this->connection->transaction(function() use($category) { + $this->destroyCategoryTask->run($category); + }); + } catch(Throwable $t) { + return false; + } + + return true; + } +} diff --git a/app/Modules/Category/Actions/Admin/EditAction.php b/app/Modules/Category/Actions/Admin/EditAction.php new file mode 100644 index 0000000..293a24a --- /dev/null +++ b/app/Modules/Category/Actions/Admin/EditAction.php @@ -0,0 +1,38 @@ + "\LaraBB\Category\Models\Category", + 'active' => "string" + ])] + public function run(Edit $request): array + { + return [ + 'category' => $this->findCategoryTask->byUuid($request->route('uuid')), + 'active' => 'forums' + ]; + } +} diff --git a/app/Modules/Category/Actions/Admin/IndexAction.php b/app/Modules/Category/Actions/Admin/IndexAction.php new file mode 100644 index 0000000..6fe00f7 --- /dev/null +++ b/app/Modules/Category/Actions/Admin/IndexAction.php @@ -0,0 +1,36 @@ + "array|\Illuminate\Database\Eloquent\Collection", + 'active' => "string" + ])] + public function run() + { + return [ + 'categories' => $this->findCategoryTask->all(['forums']), + 'active' => 'forums' + ]; + } +} diff --git a/app/Modules/Category/Actions/Admin/StoreAction.php b/app/Modules/Category/Actions/Admin/StoreAction.php new file mode 100644 index 0000000..e524d1f --- /dev/null +++ b/app/Modules/Category/Actions/Admin/StoreAction.php @@ -0,0 +1,60 @@ +connection->transaction(function () use ($request) { + $this->storeCategoryTask->run($this->prepareCategoryData($request)); + }); + } catch (Throwable $t) { + return false; + } + + return true; + } + + #[ArrayShape([ + 'created_uuid' => "mixed", + 'updated_uuid' => "mixed", + 'title' => "array|null|string", + 'slug' => "array|null|string" + ])] + private function prepareCategoryData(Store $request): array + { + return [ + 'created_uuid' => $request->user()->uuid, + 'updated_uuid' => $request->user()->uuid, + 'title' => $request->post('title'), + 'slug' => $request->post('slug') + ]; + } +} diff --git a/app/Modules/Category/Actions/Admin/UpdateAction.php b/app/Modules/Category/Actions/Admin/UpdateAction.php new file mode 100644 index 0000000..8c7351f --- /dev/null +++ b/app/Modules/Category/Actions/Admin/UpdateAction.php @@ -0,0 +1,66 @@ +findCategoryTask->byUuid($request->post('uuid')); + try { + $this->connection->transaction(function () use ($category, $request) { + $this->updateCategoryTask->run($category, $this->prepareCategoryData($request)); + }); + } catch (Throwable $t) { + return false; + } + + return true; + } + + /** + * @param Update $request + * @return array + */ + #[ArrayShape([ + 'updated_uuid' => "mixed", + 'title' => "array|null|string", + 'slug' => "array|null|string" + ])] + private function prepareCategoryData(Update $request): array + { + return [ + 'updated_uuid' => $request->user()->uuid, + 'title' => $request->post('title'), + 'slug' => $request->post('slug') + ]; + } +} diff --git a/app/Modules/Category/Actions/IndexAction.php b/app/Modules/Category/Actions/IndexAction.php new file mode 100644 index 0000000..223e9fa --- /dev/null +++ b/app/Modules/Category/Actions/IndexAction.php @@ -0,0 +1,56 @@ + "array|\Illuminate\Database\Eloquent\Collection" + ])] + public function run(Index $request): array + { + $categories = $this->findCategoryTask->all([ + 'forums' => function ($query) { + $query->with([ + 'users', + 'lastpost' => function ($query) { + return $query->with(['thread', 'createdBy']); + } + ]); + } + ])->filter(function (Category $category) use ($request) { + $category->forums = $this->getForums($category, $request); + + return $category->forums->count() > 0; + }); + + return [ + 'categories' => $categories + ]; + } +} diff --git a/app/Modules/Category/Actions/ShowAction.php b/app/Modules/Category/Actions/ShowAction.php new file mode 100644 index 0000000..b8d1643 --- /dev/null +++ b/app/Modules/Category/Actions/ShowAction.php @@ -0,0 +1,53 @@ + "\LaraBB\Category\Models\Category" + ])] + public function run(Show $request): array + { + $category = $this->findCategoryTask->bySlug($request->route('slug'), [ + 'forums' => function ($query) { + return $query->with([ + 'users', + 'lastpost' => function ($query) { + return $query->with(['thread', 'createdBy']); + } + ]); + } + ]); + + $category->forums = $this->getForums($category, $request); + + return [ + 'category' => $category + ]; + } +} diff --git a/app/Modules/Category/Data/Migrations/2020_11_05_141238_create_categories_table.php b/app/Modules/Category/Data/Migrations/2020_11_05_141238_create_categories_table.php new file mode 100644 index 0000000..087f404 --- /dev/null +++ b/app/Modules/Category/Data/Migrations/2020_11_05_141238_create_categories_table.php @@ -0,0 +1,37 @@ +id(); + $table->uuid('uuid')->index('uuid'); + $table->dateTime('created_at'); + $table->uuid('created_uuid')->index('created_uuid'); + $table->dateTime('updated_at'); + $table->uuid('updated_uuid')->index('updated_uuid'); + $table->string('title', 255); + $table->string('slug', 255); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('categories'); + } +} diff --git a/app/Modules/Category/Models/Category.php b/app/Modules/Category/Models/Category.php new file mode 100644 index 0000000..bfea2f2 --- /dev/null +++ b/app/Modules/Category/Models/Category.php @@ -0,0 +1,58 @@ +hasMany(Forum::class, 'category_uuid', 'uuid'); + } + + /** + * @param $value + */ + public function setSlugAttribute($value) + { + $this->attributes['slug'] = Str::slug($value); + } +} diff --git a/app/Modules/Category/ServiceProvider.php b/app/Modules/Category/ServiceProvider.php new file mode 100644 index 0000000..5f01776 --- /dev/null +++ b/app/Modules/Category/ServiceProvider.php @@ -0,0 +1,21 @@ +delete(); + } +} diff --git a/app/Modules/Category/Tasks/FindTask.php b/app/Modules/Category/Tasks/FindTask.php new file mode 100644 index 0000000..e8dd21d --- /dev/null +++ b/app/Modules/Category/Tasks/FindTask.php @@ -0,0 +1,50 @@ +category->query()->with($with)->get(); + } + + /** + * @param string $uuid + * @param array $with + * @return Category + */ + public function byUuid(string $uuid, array $with = []): Category + { + return $this->category->query()->with($with)->where('uuid', $uuid)->get()->first(); + } + + /** + * @param string $slug + * @param array $with + * @return Category + */ + public function bySlug(string $slug, array $with = []): Category + { + return $this->category->query()->with($with)->where('slug', $slug)->get()->first(); + } +} diff --git a/app/Modules/Category/Tasks/StoreTask.php b/app/Modules/Category/Tasks/StoreTask.php new file mode 100644 index 0000000..a08359e --- /dev/null +++ b/app/Modules/Category/Tasks/StoreTask.php @@ -0,0 +1,41 @@ +category = $category; + } + + /** + * @param array $data + * @return Category + */ + public function run(array $data = []): Category + { + $this->category->created_uuid = $data['created_uuid']; + $this->category->updated_uuid = $data['updated_uuid']; + $this->category->title = $data['title']; + $this->category->slug = $data['slug']; + $this->category->save(); + + return $this->category; + } +} diff --git a/app/Modules/Category/Tasks/UpdateTask.php b/app/Modules/Category/Tasks/UpdateTask.php new file mode 100644 index 0000000..e89ad41 --- /dev/null +++ b/app/Modules/Category/Tasks/UpdateTask.php @@ -0,0 +1,26 @@ +updated_uuid = $data['updated_uuid']; + $category->title = $data['title']; + $category->slug = $data['slug']; + + return $category->save(); + } +} diff --git a/app/Modules/Category/Traits/ForumsTrait.php b/app/Modules/Category/Traits/ForumsTrait.php new file mode 100644 index 0000000..fa3c3f0 --- /dev/null +++ b/app/Modules/Category/Traits/ForumsTrait.php @@ -0,0 +1,35 @@ +forums->filter(function (Forum $forum) use ($request) { + if (!isset($request->user()->forumPermissions[$forum->uuid])) { + return false; + } + + if ($request->user()->forumPermissions[$forum->uuid]->show_forum) { + return $forum->users->isEmpty() || $forum->users->contains('uuid', $request->user()->uuid) || $request->user()->isInGroup(['Administrator', 'Moderator']); + } + + return false; + }); + } +} diff --git a/app/Modules/Category/UI/Web/Handlers/Admin/CreateHandler.php b/app/Modules/Category/UI/Web/Handlers/Admin/CreateHandler.php new file mode 100644 index 0000000..e0d512b --- /dev/null +++ b/app/Modules/Category/UI/Web/Handlers/Admin/CreateHandler.php @@ -0,0 +1,31 @@ +view->make('category::admin.create-edit', [ + 'active' => 'forums' + ]); + } +} diff --git a/app/Modules/Category/UI/Web/Handlers/Admin/DestroyHandler.php b/app/Modules/Category/UI/Web/Handlers/Admin/DestroyHandler.php new file mode 100644 index 0000000..f6e18f9 --- /dev/null +++ b/app/Modules/Category/UI/Web/Handlers/Admin/DestroyHandler.php @@ -0,0 +1,34 @@ +destroyAction->run($request) ? $request->success() : $request->failed(); + } +} diff --git a/app/Modules/Category/UI/Web/Handlers/Admin/EditHandler.php b/app/Modules/Category/UI/Web/Handlers/Admin/EditHandler.php new file mode 100644 index 0000000..1e1367b --- /dev/null +++ b/app/Modules/Category/UI/Web/Handlers/Admin/EditHandler.php @@ -0,0 +1,36 @@ +view->make('category::admin.create-edit', $this->editAction->run($request)); + } +} diff --git a/app/Modules/Category/UI/Web/Handlers/Admin/IndexHandler.php b/app/Modules/Category/UI/Web/Handlers/Admin/IndexHandler.php new file mode 100644 index 0000000..2aca363 --- /dev/null +++ b/app/Modules/Category/UI/Web/Handlers/Admin/IndexHandler.php @@ -0,0 +1,35 @@ +view->make('category::admin.index', $this->indexAction->run()); + } +} diff --git a/app/Modules/Category/UI/Web/Handlers/Admin/StoreHandler.php b/app/Modules/Category/UI/Web/Handlers/Admin/StoreHandler.php new file mode 100644 index 0000000..466a082 --- /dev/null +++ b/app/Modules/Category/UI/Web/Handlers/Admin/StoreHandler.php @@ -0,0 +1,32 @@ +storeAction->run($request) ? $request->success() : $request->failed(); + } +} diff --git a/app/Modules/Category/UI/Web/Handlers/Admin/UpdateHandler.php b/app/Modules/Category/UI/Web/Handlers/Admin/UpdateHandler.php new file mode 100644 index 0000000..58b0779 --- /dev/null +++ b/app/Modules/Category/UI/Web/Handlers/Admin/UpdateHandler.php @@ -0,0 +1,32 @@ +updateAction->run($request) ? $request->success() : $request->failed(); + } +} diff --git a/app/Modules/Category/UI/Web/Handlers/IndexHandler.php b/app/Modules/Category/UI/Web/Handlers/IndexHandler.php new file mode 100644 index 0000000..6f862ee --- /dev/null +++ b/app/Modules/Category/UI/Web/Handlers/IndexHandler.php @@ -0,0 +1,36 @@ +view->make('category::index', $this->indexAction->run($request)); + } +} diff --git a/app/Modules/Category/UI/Web/Handlers/ShowHandler.php b/app/Modules/Category/UI/Web/Handlers/ShowHandler.php new file mode 100644 index 0000000..fbb10c8 --- /dev/null +++ b/app/Modules/Category/UI/Web/Handlers/ShowHandler.php @@ -0,0 +1,39 @@ +view->make('category::show', $this->showAction->run($request)); + } +} diff --git a/app/Modules/Category/UI/Web/Requests/Destroy.php b/app/Modules/Category/UI/Web/Requests/Destroy.php new file mode 100644 index 0000000..4500fde --- /dev/null +++ b/app/Modules/Category/UI/Web/Requests/Destroy.php @@ -0,0 +1,61 @@ +getRules('categories.uuid'); + } + + /** + * @return array|string[] + */ + public function messages(): array + { + return $this->getMessages('categories.uuid'); + } + + /** + * @return RedirectResponse + */ + public function success(): RedirectResponse + { + return redirect()->route('admin.forums')->with([ + 'success' => 'Die Kategorie wurde erfolgreich gelöscht.', + 'alert-options' => 'aside' + ]); + } + + /** + * @return RedirectResponse + */ + public function failed(): RedirectResponse + { + return redirect()->route('admin.forums')->with([ + 'error' => 'Die Kategorie konnte aufgrund einer technischen Störung nicht gelöscht werden.', + ]); + } +} diff --git a/app/Modules/Category/UI/Web/Requests/Edit.php b/app/Modules/Category/UI/Web/Requests/Edit.php new file mode 100644 index 0000000..37bc584 --- /dev/null +++ b/app/Modules/Category/UI/Web/Requests/Edit.php @@ -0,0 +1,51 @@ +getRules('categories.uuid'); + } + + /** + * @return array + */ + public function messages(): array + { + return $this->getMessages('categories.uuid'); + } + + /** + * @param null $keys + * @return array + */ + public function all($keys = null): array + { + $data = parent::all($keys); + $data['uuid'] = $this->route('uuid'); + + return $data; + } +} diff --git a/app/Modules/Category/UI/Web/Requests/Index.php b/app/Modules/Category/UI/Web/Requests/Index.php new file mode 100644 index 0000000..5d07a3a --- /dev/null +++ b/app/Modules/Category/UI/Web/Requests/Index.php @@ -0,0 +1,36 @@ +getRules('categories.slug'); + } + + /** + * @return array + */ + public function messages(): array + { + return $this->getMessages('categories.slug'); + } + + /** + * @param null $keys + * @return array + */ + public function all($keys = null): array + { + $data = parent::all($keys); + $data['slug'] = $this->route('slug'); + + return $data; + } +} diff --git a/app/Modules/Category/UI/Web/Requests/Store.php b/app/Modules/Category/UI/Web/Requests/Store.php new file mode 100644 index 0000000..3829e15 --- /dev/null +++ b/app/Modules/Category/UI/Web/Requests/Store.php @@ -0,0 +1,61 @@ +getRules('categories', ['uuid']); + } + + /** + * @return array + */ + public function messages(): array + { + return $this->getMessages('categories', ['uuid']); + } + + /** + * @return RedirectResponse + */ + public function success(): RedirectResponse + { + return redirect()->route('admin.forums')->with([ + 'success' => 'Die Kategorie wurde erfolgreich erstellt.', + 'alert-options' => 'aside' + ]); + } + + /** + * @return RedirectResponse + */ + public function failed(): RedirectResponse + { + return redirect()->route('admin.forums.category.create')->with([ + 'error' => 'Die Kategorie konnte aufgrund einer technischen Störung nicht erstellt werden.', + ]); + } +} diff --git a/app/Modules/Category/UI/Web/Requests/Update.php b/app/Modules/Category/UI/Web/Requests/Update.php new file mode 100644 index 0000000..dc34a07 --- /dev/null +++ b/app/Modules/Category/UI/Web/Requests/Update.php @@ -0,0 +1,70 @@ + 'required|uuid|exists:categories,uuid', + 'title' => 'required|max:255', + 'slug' => 'required|max:255' + ]; + } + + /** + * @return array + */ + public function messages(): array + { + return [ + 'uuid.required' => 'Es wurde keine UUID übergeben.', + 'uuid.uuid' => 'Die übergebene UUID ist ungültig.', + 'uuid.exists' => 'Die zu bearbeitende Kategorie existiert nicht.', + 'title.required' => 'Bitte geben Sie eine Bezeichnung an!', + 'title.max' => 'Die angegebene Bezeichnung ist zu lang (max. :max Zeichen).', + 'slug.required' => 'Bitte geben Sie eine URL an!', + 'slug.max' => 'Die angegebene URL ist zu lang (max. :max Zeichen).' + ]; + } + + /** + * @return RedirectResponse + */ + public function success(): RedirectResponse + { + return redirect()->route('admin.forums')->with([ + 'success' => 'Die Kategorie wurde erfolgreich bearbeitet.', + 'alert-options' => 'aside' + ]); + } + + /** + * @return RedirectResponse + */ + public function failed(): RedirectResponse + { + return redirect()->route('admin.forums.category.edit', [$this->post('uuid')])->with([ + 'error' => 'Die Kategorie konnte aufgrund einer technischen Störung nicht bearbeitet werden.', + ]); + } +} diff --git a/app/Modules/Category/UI/Web/Views/admin/create-edit.blade.php b/app/Modules/Category/UI/Web/Views/admin/create-edit.blade.php new file mode 100644 index 0000000..f522e7b --- /dev/null +++ b/app/Modules/Category/UI/Web/Views/admin/create-edit.blade.php @@ -0,0 +1,53 @@ +@extends('admin::Layouts.master') +@section('content') +
+ @include('partials.messages') +
+ @csrf + +
+
+ + +
+
+ +
+
{{ env('APP_FURL') }}/category/
+ + +
+
+
+ +
+
+
+
+@stop +@section('pagejs') + +@stop diff --git a/app/Modules/Category/UI/Web/Views/admin/index.blade.php b/app/Modules/Category/UI/Web/Views/admin/index.blade.php new file mode 100644 index 0000000..fe95147 --- /dev/null +++ b/app/Modules/Category/UI/Web/Views/admin/index.blade.php @@ -0,0 +1,69 @@ +@php /** @var LaraBB\Forum\Models\Forum $forum */ @endphp +@extends('admin::Layouts.master') +@section('content') +
+ @include('partials.messages') + @include('partials.button', ['context' => 'primary', 'href' => 'admin.forums.category.create', 'parameters' => [], 'icon' => 'plus', 'label' => 'Neue Kategorie erstellen']) + @include('partials.button', ['context' => 'primary', 'href' => 'admin.forums.create', 'parameters' => [], 'icon' => 'plus', 'label' => 'Neues Forum erstellen']) +
+
Forum
+
Themen
+
Beiträge
+
+ @forelse($categories as $category) +
+ +
+
+ @csrf + + +
+
+
+ @forelse($category->forums as $forum) +
+ +
+ {{ $forum->thread_count }} +
+
+ {{ $forum->posting_count }} +
+
+
+ @csrf + + +
+
+
+ @if(!$loop->last)
@endif + @empty +
+
+ Es sind keine Foren in dieser Kategorie vorhanden. +
+
+ @endforelse + @empty +
+
+ Es sind keine Kategorien in der Datenbank vorhanden. +
+
+ @endforelse + @include('partials.button', ['context' => 'primary', 'href' => 'admin.forums.category.create', 'parameters' => [], 'icon' => 'plus', 'label' => 'Neue Kategorie erstellen']) + @include('partials.button', ['context' => 'primary', 'href' => 'admin.forums.create', 'parameters' => [], 'icon' => 'plus', 'label' => 'Neues Forum erstellen']) +
+@stop diff --git a/app/Modules/Category/UI/Web/Views/index.blade.php b/app/Modules/Category/UI/Web/Views/index.blade.php new file mode 100644 index 0000000..aa1d021 --- /dev/null +++ b/app/Modules/Category/UI/Web/Views/index.blade.php @@ -0,0 +1,23 @@ +@php + use LaraBB\Category\Models\Category; + use LaraBB\Forum\Models\Forum; + + /** @var Category $category */ + /** @var Forum $forum */ +@endphp +@extends('layouts.master') +@section('content') +@include('partials.messages') +@foreach($categories as $category) +
+ +
+ @foreach($category->forums as $forum) + + @endforeach +
+
+@endforeach +@stop diff --git a/app/Modules/Category/UI/Web/Views/show.blade.php b/app/Modules/Category/UI/Web/Views/show.blade.php new file mode 100644 index 0000000..70f3d2b --- /dev/null +++ b/app/Modules/Category/UI/Web/Views/show.blade.php @@ -0,0 +1,27 @@ +@php + use LaraBB\Category\Models\Category; + use LaraBB\Forum\Models\Forum; + + /** @var Category $category */ + /** @var Forum $forum */ +@endphp +@extends('layouts.master') +@section('content') + + +
+ @forelse($category->forums as $forum) + + @empty +
+
+ @lang('There are no forums in this category.') +
+
+ @endforelse +
+
+@stop diff --git a/app/Modules/Category/UI/Web/routes.php b/app/Modules/Category/UI/Web/routes.php new file mode 100644 index 0000000..03f4afe --- /dev/null +++ b/app/Modules/Category/UI/Web/routes.php @@ -0,0 +1,35 @@ +name('index'); + Route::get('category/{slug}', ShowHandler::class)->name('category'); +}); + +Route::group([ + 'middleware' => [ + 'auth', + CheckAdmin::class + ], + 'prefix' => 'admin/forums' +], function() { + Route::get('/', AdminIndexHandler::class)->name('admin.forums'); + Route::group([ + 'prefix' => 'categories' + ], function() { + Route::get('create', CreateHandler::class)->name('admin.forums.category.create'); + Route::post('store', StoreHandler::class)->name('admin.forums.category.store'); + Route::get('edit/{uuid}', EditHandler::class)->name('admin.forums.category.edit'); + Route::post('update', UpdateHandler::class)->name('admin.forums.category.update'); + Route::post('destroy', DestroyHandler::class)->name('admin.forums.category.destroy'); + }); +}); diff --git a/app/Modules/Category/module.php b/app/Modules/Category/module.php new file mode 100644 index 0000000..53c2407 --- /dev/null +++ b/app/Modules/Category/module.php @@ -0,0 +1,7 @@ + [ + 'web' + ] +], __DIR__ . '/UI/Web/routes.php'); diff --git a/app/Modules/Forum/Actions/Admin/CreateAction.php b/app/Modules/Forum/Actions/Admin/CreateAction.php new file mode 100644 index 0000000..95f449b --- /dev/null +++ b/app/Modules/Forum/Actions/Admin/CreateAction.php @@ -0,0 +1,62 @@ + "array|\Illuminate\Database\Eloquent\Collection", + 'users' => "mixed", + 'groups' => "array|\Illuminate\Database\Eloquent\Collection", + 'active' => "string" + ])] + public function run(): array + { + $users = collect(); + $groups = $this->findGroupTask->all(['users']); + + $groups->map(function ($group) use ($users) { + /** @var Group $group */ + $group->users->map(function ($user) use ($users) { + + /** @var User $user */ + if (!$users->contains('uuid', $user->uuid)) { + $users->push($user); + } + }); + + $group->unsetRelation('users'); + }); + + return [ + 'categories' => $this->findCategoryTask->all(), + 'users' => $users, + 'groups' => $groups, + 'active' => 'forums', + ]; + } +} diff --git a/app/Modules/Forum/Actions/Admin/EditAction.php b/app/Modules/Forum/Actions/Admin/EditAction.php new file mode 100644 index 0000000..f6e904f --- /dev/null +++ b/app/Modules/Forum/Actions/Admin/EditAction.php @@ -0,0 +1,70 @@ + "\LaraBB\Forum\Models\Forum", + 'categories' => "array|\Illuminate\Database\Eloquent\Collection", + 'users' => "mixed", + 'groups' => "array|\Illuminate\Database\Eloquent\Collection", + 'active' => "string" + ])] + public function run(Edit $request): array + { + $users = collect(); + $groups = $this->findGroupTask->all(['users']); + + $groups->map(function ($group) use ($users) { + /** @var Group $group */ + $group->users->map(function ($user) use ($users) { + + /** @var User $user */ + if (!$users->contains('uuid', $user->uuid)) { + $users->push($user); + } + }); + + $group->unsetRelation('users'); + }); + + return [ + 'forum' => $this->findForumTask->byUuid($request->route('uuid'), ['users', 'permissions']), + 'categories' => $this->findCategoryTask->all(), + 'users' => $users, + 'groups' => $groups, + 'active' => 'forums', + ]; + } +} diff --git a/app/Modules/Forum/Actions/Admin/IndexAction.php b/app/Modules/Forum/Actions/Admin/IndexAction.php new file mode 100644 index 0000000..8628bc1 --- /dev/null +++ b/app/Modules/Forum/Actions/Admin/IndexAction.php @@ -0,0 +1,36 @@ + "\Illuminate\Database\Eloquent\Collection|\LaraBB\Forum\Models\Forum|null", + 'active' => "string" + ])] + public function run(): array + { + return [ + 'forums' => $this->findForumTask->all(), + 'active' => 'forums' + ]; + } +} diff --git a/app/Modules/Forum/Actions/Admin/StoreAction.php b/app/Modules/Forum/Actions/Admin/StoreAction.php new file mode 100644 index 0000000..41064e0 --- /dev/null +++ b/app/Modules/Forum/Actions/Admin/StoreAction.php @@ -0,0 +1,130 @@ +connection->transaction(function() use($request) { + $forum = $this->storeForumTask->run($this->prepareForumData($request)); + $this->storeForumPermissionTask->run($forum, $this->prepareForumPermissionData($forum, $request)); + $this->storeForumUserTask->run($forum, $this->prepareForumUsersData($request)); + }); + } catch(Throwable $t) { + return false; + } + + return true; + } + + /** + * @param Store $request + * @return array + */ + #[ArrayShape([ + 'category_uuid' => "array|null|string", + 'created_uuid' => "mixed", + 'updated_uuid' => "mixed", + 'title' => "array|null|string", + 'description' => "array|null|string", + 'slug' => "array|null|string" + ])] + private function prepareForumData(Store $request): array + { + return [ + 'category_uuid' => $request->post('category'), + 'created_uuid' => $request->user()->uuid, + 'updated_uuid' => $request->user()->uuid, + 'title' => $request->post('title'), + 'description' => $request->post('description'), + 'slug' => $request->post('slug'), + ]; + } + + /** + * @param Forum $forum + * @param Store $request + * @return array|false + */ + private function prepareForumPermissionData(Forum $forum, Store $request): bool|array + { + if (!$request->has('permissions')) { + return []; + } + + $permissions = []; + + foreach ($request->post('permissions') as $groupUuid => $groupPermissions) { + $permissions[] = [ + 'created_uuid' => $request->user()->uuid, + 'updated_uuid' => $request->user()->uuid, + 'group_uuid' => $groupUuid, + 'forum_uuid' => $forum->uuid, + 'show_forum' => $groupPermissions['show_forum'] ?? 0, + 'show_threads' => $groupPermissions['show_threads'] ?? 0, + 'show_posts' => $groupPermissions['show_posts'] ?? 0, + 'create_threads' => $groupPermissions['create_threads'] ?? 0, + 'create_posts' => $groupPermissions['create_posts'] ?? 0, + 'edit_threads' => $groupPermissions['edit_threads'] ?? 0, + 'edit_posts' => $groupPermissions['edit_posts'] ?? 0, + 'delete_threads' => $groupPermissions['delete_threads'] ?? 0, + 'delete_posts' => $groupPermissions['delete_posts'] ?? 0 + ]; + } + + return $permissions; + } + + private function prepareForumUsersData(Store $request): array + { + $return = []; + + foreach($request->post('users') as $user) { + $return[$user] = [ + 'uuid' => Uuid::uuid4(), + 'created_at' => now(), + 'created_uuid' => $request->user()->uuid, + 'updated_at' => now(), + 'updated_uuid' => $request->user()->uuid + ]; + } + + return $return; + } +} diff --git a/app/Modules/Forum/Actions/Admin/UpdateAction.php b/app/Modules/Forum/Actions/Admin/UpdateAction.php new file mode 100644 index 0000000..e92b0cc --- /dev/null +++ b/app/Modules/Forum/Actions/Admin/UpdateAction.php @@ -0,0 +1,144 @@ +findForumTask->byUuid($request->post('uuid'), [ + 'users', + 'permissions' + ]); + + try { + $this->connection->transaction(function() use($forum, $request) { + $this->updateForumPermissionTask->run($forum->permissions, $this->prepareForumPermissionData($forum->permissions, $request)); + $this->updateForumUserTask->run($forum, $this->prepareForumUsersData($request)); + $this->updateForumTask->run($forum, $this->prepareForumData($request)); + }); + } catch(Throwable $t) { + return false; + } + + return true; + + + } + + /** + * @param Update $request + * @return array + */ + #[ArrayShape([ + 'category_uuid' => "array|null|string", + 'updated_uuid' => "mixed", + 'title' => "array|null|string", + 'description' => "array|null|string", + 'slug' => "array|null|string" + ])] + private function prepareForumData(Update $request): array + { + return [ + 'category_uuid' => $request->post('category'), + 'updated_uuid' => $request->user()->uuid, + 'title' => $request->post('title'), + 'description' => $request->post('description'), + 'slug' => $request->post('slug') + ]; + } + + /** + * @param Collection $forumPermissions + * @param Update $request + * @return array + */ + private function prepareForumPermissionData(Collection $forumPermissions, Update $request): array + { + if (!$request->has('permissions')) { + return []; + } + + $permissions = []; + + foreach ($request->post('permissions') as $groupUuid => $groupPermissions) { + $permissionUuid = $forumPermissions->where('group_uuid', $groupUuid)->first()->uuid; + + $permissions[$permissionUuid] = [ + 'updated_uuid' => $request->user()->uuid, + 'show_forum' => $groupPermissions['show_forum'] ?? 0, + 'show_threads' => $groupPermissions['show_threads'] ?? 0, + 'show_posts' => $groupPermissions['show_posts'] ?? 0, + 'create_threads' => $groupPermissions['create_threads'] ?? 0, + 'create_posts' => $groupPermissions['create_posts'] ?? 0, + 'edit_threads' => $groupPermissions['edit_threads'] ?? 0, + 'edit_posts' => $groupPermissions['edit_posts'] ?? 0, + 'delete_threads' => $groupPermissions['delete_threads'] ?? 0, + 'delete_posts' => $groupPermissions['delete_posts'] ?? 0 + ]; + } + + return $permissions; + } + + /** + * @param Update $request + * @return array + */ + private function prepareForumUsersData(Update $request): array + { + if(!$request->has('users')) { + return []; + } + + $return = []; + + foreach($request->post('users') as $user) { + $return[$user] = [ + 'uuid' => Uuid::uuid4(), + 'created_at' => now(), + 'created_uuid' => $request->user()->uuid, + 'updated_at' => now(), + 'updated_uuid' => $request->user()->uuid + ]; + } + + return $return; + } +} diff --git a/app/Modules/Forum/Actions/IndexAction.php b/app/Modules/Forum/Actions/IndexAction.php new file mode 100644 index 0000000..312e4b3 --- /dev/null +++ b/app/Modules/Forum/Actions/IndexAction.php @@ -0,0 +1,37 @@ +forum->threads = $request->forum->threads->filter(function(Thread $thread) use($request) { + if($thread->groups->isEmpty() && $thread->users->isEmpty()) { + return true; + } + + return $thread->groups->min('priority') <= $request->user()->groups->max('priority') || $thread->users->contains('uuid', $request->user()->uuid); + }); + + return [ + 'forum' => $request->forum + ]; + } +} diff --git a/app/Modules/Forum/Data/Migrations/2020_10_29_102836_create_forums_table.php b/app/Modules/Forum/Data/Migrations/2020_10_29_102836_create_forums_table.php new file mode 100644 index 0000000..1323612 --- /dev/null +++ b/app/Modules/Forum/Data/Migrations/2020_10_29_102836_create_forums_table.php @@ -0,0 +1,41 @@ +id(); + $table->uuid('uuid')->index('uuid'); + $table->uuid('category_uuid')->index('category_uuid'); + $table->dateTime('created_at'); + $table->uuid('created_uuid')->index('created_uuid'); + $table->dateTime('updated_at'); + $table->uuid('updated_uuid')->index('updated_uuid'); + $table->string('title', 255); + $table->string('description', 255)->nullable(); + $table->string('slug', 255)->index('slug'); + $table->integer('thread_count')->default(0); + $table->integer('posting_count')->default(0); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('forums'); + } +} diff --git a/app/Modules/Forum/Data/Migrations/2020_10_29_103521_create_forums_has_users_table.php b/app/Modules/Forum/Data/Migrations/2020_10_29_103521_create_forums_has_users_table.php new file mode 100644 index 0000000..aeef837 --- /dev/null +++ b/app/Modules/Forum/Data/Migrations/2020_10_29_103521_create_forums_has_users_table.php @@ -0,0 +1,37 @@ +id(); + $table->uuid('uuid')->index('uuid'); + $table->dateTime('created_at'); + $table->uuid('created_uuid')->index('created_uuid'); + $table->dateTime('updated_at'); + $table->uuid('updated_uuid')->index('updated_uuid'); + $table->uuid('forum_uuid')->index('forum_uuid'); + $table->uuid('user_uuid')->index('user_uuid'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('forums_has_users'); + } +} diff --git a/app/Modules/Forum/Data/Migrations/2020_10_29_104439_create_groups_has_forums_permissions_table.php b/app/Modules/Forum/Data/Migrations/2020_10_29_104439_create_groups_has_forums_permissions_table.php new file mode 100644 index 0000000..6ef63b3 --- /dev/null +++ b/app/Modules/Forum/Data/Migrations/2020_10_29_104439_create_groups_has_forums_permissions_table.php @@ -0,0 +1,46 @@ +id(); + $table->uuid('uuid')->index('uuid'); + $table->dateTime('created_at'); + $table->uuid('created_uuid')->index('created_uuid'); + $table->dateTime('updated_at'); + $table->uuid('updated_uuid')->index('updated_uuid'); + $table->uuid('group_uuid')->index('group_uuid'); + $table->uuid('forum_uuid')->index('forum_uuid'); + $table->boolean('show_forum')->default(0); + $table->boolean('show_threads')->default(0); + $table->boolean('show_posts')->default(0); + $table->boolean('create_threads')->default(0); + $table->boolean('create_posts')->default(0); + $table->boolean('edit_threads')->default(0); + $table->boolean('edit_posts')->default(0); + $table->boolean('delete_threads')->default(0); + $table->boolean('delete_posts')->default(0); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('groups_has_forums_permissions'); + } +} diff --git a/app/Modules/Forum/Data/Migrations/2020_11_25_134308_add_lastpost_to_forums_table.php b/app/Modules/Forum/Data/Migrations/2020_11_25_134308_add_lastpost_to_forums_table.php new file mode 100644 index 0000000..816d765 --- /dev/null +++ b/app/Modules/Forum/Data/Migrations/2020_11_25_134308_add_lastpost_to_forums_table.php @@ -0,0 +1,32 @@ +uuid('lastpost_uuid')->after('category_uuid')->index('lastpost_uuid')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('forums', function (Blueprint $table) { + $table->dropColumn('lastpost_uuid'); + }); + } +} diff --git a/app/Modules/Forum/Data/Migrations/2021_07_03_004316_create_forums_has_prefixes_table.php b/app/Modules/Forum/Data/Migrations/2021_07_03_004316_create_forums_has_prefixes_table.php new file mode 100644 index 0000000..40eabc5 --- /dev/null +++ b/app/Modules/Forum/Data/Migrations/2021_07_03_004316_create_forums_has_prefixes_table.php @@ -0,0 +1,37 @@ +id(); + $table->uuid('uuid')->index('uuid'); + $table->dateTime('created_at'); + $table->uuid('created_uuid')->index('created_uuid'); + $table->dateTime('updated_at'); + $table->uuid('updated_uuid')->index('updated_uuid'); + $table->uuid('forum_uuid')->index('forum_uuid'); + $table->uuid('prefix_uuid')->index('prefix_uuid'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('forums_has_prefixes'); + } +} diff --git a/app/Modules/Forum/Models/Forum.php b/app/Modules/Forum/Models/Forum.php new file mode 100644 index 0000000..c377ec8 --- /dev/null +++ b/app/Modules/Forum/Models/Forum.php @@ -0,0 +1,104 @@ +belongsTo(Category::class, 'category_uuid', 'uuid'); + } + + /** + * @return HasMany + */ + public function permissions(): HasMany + { + return $this->hasMany(Permission::class, 'forum_uuid', 'uuid'); + } + + /** + * @return BelongsToMany + */ + public function users(): BelongsToMany + { + return $this->belongsToMany(User::class, 'forums_has_users', 'forum_uuid', 'user_uuid')->withTimestamps(); + } + + /** + * @return HasMany + */ + public function threads(): HasMany + { + return $this->hasMany(Thread::class, 'forum_uuid', 'uuid'); + } + + /** + * @return BelongsTo + */ + public function lastpost(): BelongsTo + { + return $this->belongsTo(Post::class, 'lastpost_uuid', 'uuid'); + } + + /** + * @return BelongsToMany + */ + public function prefixes(): BelongsToMany + { + return $this->belongsToMany(Prefix::class, 'forums_has_prefixes', 'forum_uuid', 'prefix_uuid'); + } +} diff --git a/app/Modules/Forum/Models/Permission.php b/app/Modules/Forum/Models/Permission.php new file mode 100644 index 0000000..cabbf6e --- /dev/null +++ b/app/Modules/Forum/Models/Permission.php @@ -0,0 +1,67 @@ +forum->with($with)->get(); + } + + /** + * @param string $uuid + * @param array $with + * @return Forum + */ + public function byUuid(string $uuid, array $with = []): Forum + { + return $this->forum->query()->with($with)->where('uuid', $uuid)->get()->first(); + } + + /** + * @param string $slug + * @param array $with + * @return Forum + */ + public function bySlug(string $slug, array $with = []): Forum + { + return $this->forum->query()->with($with)->where('slug', $slug)->get()->first(); + } +} diff --git a/app/Modules/Forum/Tasks/Forum/StoreTask.php b/app/Modules/Forum/Tasks/Forum/StoreTask.php new file mode 100644 index 0000000..31f4e3d --- /dev/null +++ b/app/Modules/Forum/Tasks/Forum/StoreTask.php @@ -0,0 +1,37 @@ +forum->category_uuid = $data['category_uuid']; + $this->forum->created_uuid = $data['created_uuid']; + $this->forum->updated_uuid = $data['updated_uuid']; + $this->forum->title = $data['title']; + $this->forum->description = $data['description']; + $this->forum->slug = $data['slug']; + $this->forum->save(); + + return $this->forum; + } +} diff --git a/app/Modules/Forum/Tasks/Forum/UpdateTask.php b/app/Modules/Forum/Tasks/Forum/UpdateTask.php new file mode 100644 index 0000000..ed662f1 --- /dev/null +++ b/app/Modules/Forum/Tasks/Forum/UpdateTask.php @@ -0,0 +1,31 @@ +updated_uuid = $data['updated_uuid'] ?? $forum->updated_uuid; + $forum->lastpost_uuid = $data['lastpost_uuid'] ?? $forum->lastpost_uuid; + $forum->category_uuid = $data['category_uuid'] ?? $forum->category_uuid; + $forum->title = $data['title'] ?? $forum->title; + $forum->description = $data['description'] ?? $forum->description; + $forum->slug = $data['slug'] ?? $forum->slug; + $forum->thread_count = $data['thread_count'] ?? $forum->thread_count; + $forum->posting_count = $data['posting_count'] ?? $forum->posting_count; + + return $forum->save(); + } +} diff --git a/app/Modules/Forum/Tasks/Permission/StoreTask.php b/app/Modules/Forum/Tasks/Permission/StoreTask.php new file mode 100644 index 0000000..28d512c --- /dev/null +++ b/app/Modules/Forum/Tasks/Permission/StoreTask.php @@ -0,0 +1,23 @@ +permissions()->createMany($data); + } +} diff --git a/app/Modules/Forum/Tasks/Permission/UpdateTask.php b/app/Modules/Forum/Tasks/Permission/UpdateTask.php new file mode 100644 index 0000000..6c893c5 --- /dev/null +++ b/app/Modules/Forum/Tasks/Permission/UpdateTask.php @@ -0,0 +1,39 @@ +map(function (Permission $permission) use ($data) { + $permission->updated_uuid = $data[$permission->uuid]['updated_uuid'] ?? $permission->updated_uuid; + $permission->show_forum = $data[$permission->uuid]['show_forum'] ?? $permission->show_forum; + $permission->show_threads = $data[$permission->uuid]['show_threads'] ?? $permission->show_threads; + $permission->show_posts = $data[$permission->uuid]['show_posts'] ?? $permission->show_posts; + $permission->create_threads = $data[$permission->uuid]['create_threads'] ?? $permission->create_threads; + $permission->create_posts = $data[$permission->uuid]['create_posts'] ?? $permission->create_posts; + $permission->edit_threads = $data[$permission->uuid]['edit_threads'] ?? $permission->edit_threads; + $permission->edit_posts = $data[$permission->uuid]['edit_posts'] ?? $permission->edit_posts; + $permission->delete_threads = $data[$permission->uuid]['delete_threads'] ?? $permission->delete_threads; + $permission->delete_posts = $data[$permission->uuid]['delete_posts'] ?? $permission->delete_posts; + $permission->save(); + }); + + return true; + } +} diff --git a/app/Modules/Forum/Tasks/User/StoreTask.php b/app/Modules/Forum/Tasks/User/StoreTask.php new file mode 100644 index 0000000..e929c39 --- /dev/null +++ b/app/Modules/Forum/Tasks/User/StoreTask.php @@ -0,0 +1,26 @@ +users()->attach($data); + + return true; + } +} diff --git a/app/Modules/Forum/Tasks/User/UpdateTask.php b/app/Modules/Forum/Tasks/User/UpdateTask.php new file mode 100644 index 0000000..182a7ad --- /dev/null +++ b/app/Modules/Forum/Tasks/User/UpdateTask.php @@ -0,0 +1,27 @@ +users()->detach(); + $forum->users()->attach($data); + + return true; + } +} diff --git a/app/Modules/Forum/UI/Web/Handlers/Admin/CreateHandler.php b/app/Modules/Forum/UI/Web/Handlers/Admin/CreateHandler.php new file mode 100644 index 0000000..b9468b8 --- /dev/null +++ b/app/Modules/Forum/UI/Web/Handlers/Admin/CreateHandler.php @@ -0,0 +1,35 @@ +view->make('forum::admin.create-edit', $this->createAction->run()); + } +} diff --git a/app/Modules/Forum/UI/Web/Handlers/Admin/DestroyHandler.php b/app/Modules/Forum/UI/Web/Handlers/Admin/DestroyHandler.php new file mode 100644 index 0000000..233d523 --- /dev/null +++ b/app/Modules/Forum/UI/Web/Handlers/Admin/DestroyHandler.php @@ -0,0 +1,20 @@ +view->make('forum::admin.create-edit', $this->editAction->run($request)); + } +} diff --git a/app/Modules/Forum/UI/Web/Handlers/Admin/IndexHandler.php b/app/Modules/Forum/UI/Web/Handlers/Admin/IndexHandler.php new file mode 100644 index 0000000..f194a88 --- /dev/null +++ b/app/Modules/Forum/UI/Web/Handlers/Admin/IndexHandler.php @@ -0,0 +1,35 @@ +view->make('forum::admin.index', $this->indexAction->run()); + } +} diff --git a/app/Modules/Forum/UI/Web/Handlers/Admin/StoreHandler.php b/app/Modules/Forum/UI/Web/Handlers/Admin/StoreHandler.php new file mode 100644 index 0000000..0d2022a --- /dev/null +++ b/app/Modules/Forum/UI/Web/Handlers/Admin/StoreHandler.php @@ -0,0 +1,32 @@ +storeAction->run($request) ? $request->success() : $request->failed(); + } +} diff --git a/app/Modules/Forum/UI/Web/Handlers/Admin/UpdateHandler.php b/app/Modules/Forum/UI/Web/Handlers/Admin/UpdateHandler.php new file mode 100644 index 0000000..0a80459 --- /dev/null +++ b/app/Modules/Forum/UI/Web/Handlers/Admin/UpdateHandler.php @@ -0,0 +1,29 @@ +updateAction->run($request) ? $request->success() : $request->failed(); + } +} diff --git a/app/Modules/Forum/UI/Web/Handlers/ForumHandler.php b/app/Modules/Forum/UI/Web/Handlers/ForumHandler.php new file mode 100644 index 0000000..13356bb --- /dev/null +++ b/app/Modules/Forum/UI/Web/Handlers/ForumHandler.php @@ -0,0 +1,20 @@ +view->make('forum::index', $this->indexAction->run($request)); + } +} diff --git a/app/Modules/Forum/UI/Web/Requests/Edit.php b/app/Modules/Forum/UI/Web/Requests/Edit.php new file mode 100644 index 0000000..7d020a4 --- /dev/null +++ b/app/Modules/Forum/UI/Web/Requests/Edit.php @@ -0,0 +1,54 @@ + 'required|uuid|exists:forums,uuid' + ]; + } + + /** + * @return array + */ + public function messages(): array + { + return [ + 'uuid.required' => 'Es wurde keine UUID übergeben.', + 'uuid.uuid' => 'Die übergebene UUID ist ungültig.', + 'uuid.exists' => 'Das zu bearbeitende Forum existiert nicht.' + ]; + } + + /** + * @param array $keys + * @return array + */ + public function all($keys = []): array + { + $data = parent::all($keys); + $data['uuid'] = $this->route('uuid'); + + return $data; + } +} diff --git a/app/Modules/Forum/UI/Web/Requests/Show.php b/app/Modules/Forum/UI/Web/Requests/Show.php new file mode 100644 index 0000000..3a47a45 --- /dev/null +++ b/app/Modules/Forum/UI/Web/Requests/Show.php @@ -0,0 +1,80 @@ +forum = $getForumTask->bySlug($this->route('slug'), [ + 'users', + 'category', + 'threads' => function($query) { + return $query->with([ + 'lastpost' => function($query) { + return $query->with(['createdBy']); + }, + 'prefix', + 'groups', + 'users' + ]); + } + ]); + + if(is_null($this->forum)) { + abort(404, __('The desired forum does not exist.')); + } + + if(!$this->user()->forumPermissions[$this->forum->uuid]->show_forum) { + abort(403, __('You are not authorized to view this forum.')); + } + + if(!$this->forum->users->isEmpty()) { + if(!$this->forum->users->contains('uuid', $this->user()->uuid) && $this->user()->groups->max('priority') <= 90) { + abort(403, __('You are not authorized to view this forum.')); + } + + return true; + } + + return true; + } + + /** + * @return array + */ + public function rules(): array + { + return []; + } + + /** + * @return array + */ + public function messages(): array + { + return []; + } +} diff --git a/app/Modules/Forum/UI/Web/Requests/Store.php b/app/Modules/Forum/UI/Web/Requests/Store.php new file mode 100644 index 0000000..7e93164 --- /dev/null +++ b/app/Modules/Forum/UI/Web/Requests/Store.php @@ -0,0 +1,69 @@ + 'required|max:255', + 'category' => 'required|exists:categories,uuid', + 'slug' => 'required|max:255', + ]; + } + + /** + * @return array + */ + public function messages(): array + { + return [ + 'category.required' => 'Bitte wählen Sie eine Kategorie aus!', + 'category.exists' => 'Die angegebene Kategorie existiert nicht.', + 'title.required' => 'Bitte geben Sie einen Titel für das neue Forum an!', + 'title.max' => 'Der angegebene Titel ist zu lang (max. :max Zeichen).', + 'slug.required' => 'Bitte geben Sie eine URL zum Forum an!', + 'slug.max' => 'Die angegebene URL ist zu lang (max. :max Zeichen).' + ]; + } + + /** + * @return RedirectResponse + */ + public function success(): RedirectResponse + { + return redirect()->route('admin-forums')->with([ + 'success' => 'Das Forum wurde erfolgreich erstellt.', + 'alert-options' => 'aside' + ]); + } + + /** + * @return RedirectResponse + */ + public function failed(): RedirectResponse + { + return redirect()->route('admin.forums.create')->with([ + 'error' => 'Das Forum konnte aufgrund einer technischen Störung nicht erstellt werden.' + ])->withInput(); + } +} diff --git a/app/Modules/Forum/UI/Web/Requests/Update.php b/app/Modules/Forum/UI/Web/Requests/Update.php new file mode 100644 index 0000000..741861d --- /dev/null +++ b/app/Modules/Forum/UI/Web/Requests/Update.php @@ -0,0 +1,73 @@ + 'required|uuid|exists:forums,uuid', + 'title' => 'required|max:255', + 'category' => 'required|exists:categories,uuid', + 'slug' => 'required|max:255', + ]; + } + + /** + * @return array + */ + public function messages(): array + { + return [ + 'uuid.required' => 'Es wurde keine UUID übergeben.', + 'uuid.uuid' => 'Die übergebene UUID ist ungültig.', + 'uuid.exists' => 'Das zu bearbeitende Forum existiert nicht.', + 'category.required' => 'Bitte wählen Sie eine Kategorie aus!', + 'category.exists' => 'Die angegebene Kategorie existiert nicht.', + 'title.required' => 'Bitte geben Sie einen Titel für das neue Forum an!', + 'title.max' => 'Der angegebene Titel ist zu lang (max. :max Zeichen).', + 'slug.required' => 'Bitte geben Sie eine URL zum Forum an!', + 'slug.max' => 'Die angegebene URL ist zu lang (max. :max Zeichen).' + ]; + } + + /** + * @return RedirectResponse + */ + public function success(): RedirectResponse + { + return redirect()->route('admin.forums-edit', [$this->post('uuid')])->with([ + 'success' => 'Das Forum wurde erfolgreich bearbeitet.', + 'alert-options' => 'aside' + ]); + } + + /** + * @return RedirectResponse + */ + public function failed(): RedirectResponse + { + return redirect()->route('admin.forums.edit', [$this->post('uuid')])->with([ + 'error' => 'Das Forum konnte aufgrund einer technischen Störung nicht erstellt werden.' + ])->withInput(); + } +} diff --git a/app/Modules/Forum/UI/Web/Views/admin/create-edit.blade.php b/app/Modules/Forum/UI/Web/Views/admin/create-edit.blade.php new file mode 100644 index 0000000..fe51074 --- /dev/null +++ b/app/Modules/Forum/UI/Web/Views/admin/create-edit.blade.php @@ -0,0 +1,254 @@ +@php + /** @var LaraBB\Group\Models\Group $group */ + /** @var LaraBB\User\Models\User $user */ + /** @var LaraBB\Category\Models\Category $category */ +@endphp +@extends('admin::Layouts.master') +@section('pagecss') + +@stop +@section('content') +
+ @include('partials.messages') +
+ @csrf + +
+
+
+
+ + +
+
+ + +
+
+
+ +
+
{{ env('APP_FURL') }}/forum/
+ + +
+
+
+ + +
+
+ + +
+
+
+
+
+ +
+ Diese Ansicht dient zur Zuweisung von globalen Rechten je nach Benutzergruppe.
+ Alle Nutzer können standardmäßig ihre eigenen Themen & Beiträge bearbeiten oder löschen. +
+
+
+
+ Gruppe +
+
+ Forum +
+
+ +
+
+
+
+ Themen +
+
+
+
+
+
+
+
+ Beiträge +
+
+
+
+
+
+
+
+ @foreach($groups as $group) + @php $groupPermissions = isset($forum) ? $forum->permissions->where('group_uuid', $group->uuid)->first() : null @endphp +
+
{{ $group->group }}
+
+
+ uuid . '.show_forum', isset($groupPermissions->show_forum) && $groupPermissions->show_forum) ? ' checked' : '' }}> + +
+
+
+
+
+
+ uuid . '.show_threads', isset($groupPermissions->show_threads) && $groupPermissions->show_threads) ? ' checked' : '' }}> + +
+
+
+
+ uuid . '.create_threads', isset($groupPermissions->create_threads) && $groupPermissions->create_threads) ? ' checked' : '' }}> + +
+
+
+
+ uuid . '.edit_threads', isset($groupPermissions->edit_threads) && $groupPermissions->edit_threads) ? ' checked' : '' }}> + +
+
+
+
+ uuid . '.delete_threads', isset($groupPermissions->delete_threads) && $groupPermissions->delete_threads) ? ' checked' : '' }}> + +
+
+
+
+
+
+
+
+ uuid . '.show_posts', isset($groupPermissions->show_posts) && $groupPermissions->show_posts) ? ' checked' : '' }}> + +
+
+
+
+ uuid . '.create_posts', isset($groupPermissions->create_posts) && $groupPermissions->create_posts) ? ' checked' : '' }}> + +
+
+
+
+ uuid . '.edit_posts', isset($groupPermissions->edit_posts) && $groupPermissions->edit_posts) ? ' checked' : '' }}> + +
+
+
+
+ uuid . '.delete_posts', isset($groupPermissions->delete_posts) && $groupPermissions->delete_posts) ? ' checked' : '' }}> + +
+
+
+
+
+ @if(!$loop->last)
@endif + @endforeach +
+
+
+
+
+ @include('partials.button', ['context' => 'primary', 'type' => 'submit', 'icon' => 'save', 'label' => 'Speichern']) +
+
+
+
+@stop +@section('pagejs') + + +@stop diff --git a/app/Modules/Forum/UI/Web/Views/index.blade.php b/app/Modules/Forum/UI/Web/Views/index.blade.php new file mode 100644 index 0000000..cadd92a --- /dev/null +++ b/app/Modules/Forum/UI/Web/Views/index.blade.php @@ -0,0 +1,53 @@ +@php + use LaraBB\Category\Models\Category; + use LaraBB\Forum\Models\Forum; + use LaraBB\Thread\Models\Thread; + + /** @var Category $category */ + /** @var Forum $forum */ + /** @var Thread $thread */ +@endphp +@extends('layouts.master') +@section('content') + @include('partials.messages') +
+ + {!! button('Create Thread')->permission($currentUser->forumPermissions[$forum->uuid]->getAttribute('create_threads')) + ->type('link') + ->href(route('thread-create', [$forum->slug])) + ->class('btn btn-purple text-uppercase') + ->icon('fas fa-fw fa-plus') + ->render() !!} +
+ + +
+ @forelse($forum->threads as $thread) + + @empty +
+
+ @lang('There are no threads in this forum.') +
+
+ @endforelse +
+
+
+ + {!! button('Create Thread')->permission($currentUser->forumPermissions[$forum->uuid]->getAttribute('create_threads')) + ->type('link') + ->href(route('thread-create', [$forum->slug])) + ->class('btn btn-purple text-uppercase') + ->icon('fas fa-fw fa-plus') + ->render() !!} +
+@stop diff --git a/app/Modules/Forum/UI/Web/routes.php b/app/Modules/Forum/UI/Web/routes.php new file mode 100644 index 0000000..1846834 --- /dev/null +++ b/app/Modules/Forum/UI/Web/routes.php @@ -0,0 +1,30 @@ + [ + SetUser::class + ], + 'prefix' => 'forum', +], function() { + Route::get('{slug}', IndexHandler::class)->name('forum'); +}); + +Route::group([ + 'namespace' => 'Admin', + 'prefix' => 'admin/forums', + 'middleware' => [ + 'auth', + CheckAdmin::class + ] +], function() { + //Route::get('/', OverviewHandler::class)->name('admin-forums'); + Route::get('create', CreateHandler::class)->name('admin.forums.create'); + Route::get('{uuid}', EditHandler::class)->name('admin.forums.edit'); + Route::post('store', StoreHandler::class)->name('admin.forums.store'); + Route::post('update', UpdateHandler::class)->name('admin.forums.update'); + Route::post('destroy', DestroyHandler::class)->name('admin.forums.destroy'); +}); + diff --git a/app/Modules/Forum/module.php b/app/Modules/Forum/module.php new file mode 100644 index 0000000..ef52051 --- /dev/null +++ b/app/Modules/Forum/module.php @@ -0,0 +1,8 @@ + 'LaraBB\Forum\UI\Web\Handlers', + 'middleware' => [ + 'web' + ] +], __DIR__ . '/UI/Web/routes.php'); diff --git a/app/Modules/Group/Actions/Admin/DestroyAction.php b/app/Modules/Group/Actions/Admin/DestroyAction.php new file mode 100644 index 0000000..82b9ff2 --- /dev/null +++ b/app/Modules/Group/Actions/Admin/DestroyAction.php @@ -0,0 +1,38 @@ +destroyGroupTask = $destroyGroupTask; + } + + /** + * @param Destroy $request + * @return bool|null + * @throws Exception + */ + public function run(Destroy $request): ?bool + { + return $this->destroyGroupTask->byUuid($request->post('uuid')); + } +} diff --git a/app/Modules/Group/Actions/Admin/EditAction.php b/app/Modules/Group/Actions/Admin/EditAction.php new file mode 100644 index 0000000..abeb51f --- /dev/null +++ b/app/Modules/Group/Actions/Admin/EditAction.php @@ -0,0 +1,34 @@ +getGroupTask->byUuid($request->route('uuid')); + } +} diff --git a/app/Modules/Group/Actions/Admin/OverviewAction.php b/app/Modules/Group/Actions/Admin/OverviewAction.php new file mode 100644 index 0000000..2022095 --- /dev/null +++ b/app/Modules/Group/Actions/Admin/OverviewAction.php @@ -0,0 +1,31 @@ +getGroupTask->all(); + } +} diff --git a/app/Modules/Group/Actions/Admin/StoreAction.php b/app/Modules/Group/Actions/Admin/StoreAction.php new file mode 100644 index 0000000..15ede51 --- /dev/null +++ b/app/Modules/Group/Actions/Admin/StoreAction.php @@ -0,0 +1,51 @@ +storeGroupTask = $storeGroupTask; + } + + /** + * @param Store $request + * @return bool + */ + public function run(Store $request): bool + { + return $this->storeGroupTask->run($this->prepareGroupData($request)); + } + + /** + * @param Store $request + * @return array + */ + private function prepareGroupData(Store $request): array + { + return [ + 'created_uuid' => $request->user()->uuid, + 'updated_uuid' => $request->user()->uuid, + 'group' => $request->post('group'), + 'color' => $request->post('color'), + 'priority' => $request->post('priority') + ]; + } +} diff --git a/app/Modules/Group/Actions/Admin/UpdateAction.php b/app/Modules/Group/Actions/Admin/UpdateAction.php new file mode 100644 index 0000000..66fae9e --- /dev/null +++ b/app/Modules/Group/Actions/Admin/UpdateAction.php @@ -0,0 +1,51 @@ +getGroupTask->byUuid($request->post('uuid')); + + return $this->updateGroupTask->run($group, $this->prepareGroupData($request)); + } + + /** + * @param Update $request + * @return array + */ + private function prepareGroupData(Update $request): array + { + return [ + 'updated_uuid' => $request->user()->uuid, + 'group' => $request->post('group'), + 'color' => $request->post('color'), + 'priority' => $request->post('priority') + ]; + } +} diff --git a/app/Modules/Group/Data/Migrations/2020_07_01_084617_create_groups_table.php b/app/Modules/Group/Data/Migrations/2020_07_01_084617_create_groups_table.php new file mode 100644 index 0000000..049dc15 --- /dev/null +++ b/app/Modules/Group/Data/Migrations/2020_07_01_084617_create_groups_table.php @@ -0,0 +1,38 @@ +increments('id'); + $table->uuid('uuid')->unique('uuid'); + $table->dateTime('created_at'); + $table->uuid('created_uuid')->index('created_uuid'); + $table->dateTime('updated_at'); + $table->uuid('updated_uuid')->index('updated_uuid'); + $table->text('group'); + $table->char('color', 20); + $table->tinyInteger('priority')->unsigned(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('groups'); + } +} diff --git a/app/Modules/Group/Models/Group.php b/app/Modules/Group/Models/Group.php new file mode 100644 index 0000000..d1ff909 --- /dev/null +++ b/app/Modules/Group/Models/Group.php @@ -0,0 +1,74 @@ +belongsToMany(User::class, 'users_has_groups', 'group_uuid', 'user_uuid'); + } + + /** + * @return HasMany + */ + public function permissions(): HasMany + { + return $this->hasMany(Permission::class, 'group_uuid', 'uuid'); + } +} diff --git a/app/Modules/Group/ServiceProvider.php b/app/Modules/Group/ServiceProvider.php new file mode 100644 index 0000000..0dd8dda --- /dev/null +++ b/app/Modules/Group/ServiceProvider.php @@ -0,0 +1,21 @@ +query->delete(); + } + + /** + * @param $uuid + * @return bool|null + * @throws Exception + */ + public function byUuid($uuid): ?bool + { + $this->query = $this->group->query()->where('uuid', $uuid); + + return $this->run(); + } +} diff --git a/app/Modules/Group/Tasks/FindTask.php b/app/Modules/Group/Tasks/FindTask.php new file mode 100644 index 0000000..4959be8 --- /dev/null +++ b/app/Modules/Group/Tasks/FindTask.php @@ -0,0 +1,50 @@ +group->query()->with($with)->get(); + } + + /** + * @param string $uuid + * @param array $with + * @return Group + */ + public function byUuid(string $uuid, array $with = []): Group + { + return $this->group->query()->with($with)->where('uuid', $uuid)->get()->first(); + } + + /** + * @param string $name + * @param array $with + * @return Group + */ + public function byName(string $name, array $with = []): Group + { + return $this->group->query()->with($with)->where('name', $name)->get()->first(); + } +} diff --git a/app/Modules/Group/Tasks/StoreTask.php b/app/Modules/Group/Tasks/StoreTask.php new file mode 100644 index 0000000..58cc657 --- /dev/null +++ b/app/Modules/Group/Tasks/StoreTask.php @@ -0,0 +1,36 @@ +group->created_uuid = $data['created_uuid']; + $this->group->updated_uuid = $data['updated_uuid']; + $this->group->group = $data['group']; + $this->group->color = $data['color']; + $this->group->priority = $data['priority']; + + return $this->group->save(); + } +} diff --git a/app/Modules/Group/Tasks/UpdateTask.php b/app/Modules/Group/Tasks/UpdateTask.php new file mode 100644 index 0000000..8134407 --- /dev/null +++ b/app/Modules/Group/Tasks/UpdateTask.php @@ -0,0 +1,27 @@ +updated_uuid = $data['updated_uuid']; + $group->group = $data['group']; + $group->color = $data['color']; + $group->priority = $data['priority']; + + return $group->save(); + } +} diff --git a/app/Modules/Group/UI/Web/Handlers/Admin/CreateHandler.php b/app/Modules/Group/UI/Web/Handlers/Admin/CreateHandler.php new file mode 100644 index 0000000..b0f11e1 --- /dev/null +++ b/app/Modules/Group/UI/Web/Handlers/Admin/CreateHandler.php @@ -0,0 +1,32 @@ +view->make('group::admin.create-edit', [ + 'active' => 'groups' + ]); + } +} diff --git a/app/Modules/Group/UI/Web/Handlers/Admin/DestroyHandler.php b/app/Modules/Group/UI/Web/Handlers/Admin/DestroyHandler.php new file mode 100644 index 0000000..d27af31 --- /dev/null +++ b/app/Modules/Group/UI/Web/Handlers/Admin/DestroyHandler.php @@ -0,0 +1,33 @@ +destroyAction->run($request) ? $request->success() : $request->failed(); + } +} diff --git a/app/Modules/Group/UI/Web/Handlers/Admin/EditHandler.php b/app/Modules/Group/UI/Web/Handlers/Admin/EditHandler.php new file mode 100644 index 0000000..30ee878 --- /dev/null +++ b/app/Modules/Group/UI/Web/Handlers/Admin/EditHandler.php @@ -0,0 +1,41 @@ +editAction->run($request); + + return $this->view->make('group::admin.create-edit', [ + 'group' => $group, + 'active' => 'groups' + ]); + } +} diff --git a/app/Modules/Group/UI/Web/Handlers/Admin/OverviewHandler.php b/app/Modules/Group/UI/Web/Handlers/Admin/OverviewHandler.php new file mode 100644 index 0000000..3337b52 --- /dev/null +++ b/app/Modules/Group/UI/Web/Handlers/Admin/OverviewHandler.php @@ -0,0 +1,36 @@ +overviewAction->run(); + + return $this->view->make('group::admin.index', [ + 'groups' => $return, + 'active' => 'groups' + ]); + } +} diff --git a/app/Modules/Group/UI/Web/Handlers/Admin/StoreHandler.php b/app/Modules/Group/UI/Web/Handlers/Admin/StoreHandler.php new file mode 100644 index 0000000..2e022a6 --- /dev/null +++ b/app/Modules/Group/UI/Web/Handlers/Admin/StoreHandler.php @@ -0,0 +1,33 @@ +storeAction->run($request) ? $request->success() : $request->failed(); + } +} diff --git a/app/Modules/Group/UI/Web/Handlers/Admin/UpdateHandler.php b/app/Modules/Group/UI/Web/Handlers/Admin/UpdateHandler.php new file mode 100644 index 0000000..912caf6 --- /dev/null +++ b/app/Modules/Group/UI/Web/Handlers/Admin/UpdateHandler.php @@ -0,0 +1,34 @@ +updateAction->run($request) ? $request->success() : $request->failed(); + } +} diff --git a/app/Modules/Group/UI/Web/Requests/Destroy.php b/app/Modules/Group/UI/Web/Requests/Destroy.php new file mode 100644 index 0000000..0366b61 --- /dev/null +++ b/app/Modules/Group/UI/Web/Requests/Destroy.php @@ -0,0 +1,64 @@ + 'required|uuid|exists:groups,uuid' + ]; + } + + /** + * @return array|string[] + */ + public function messages(): array + { + return [ + 'uuid.required' => 'Es wurde keine UUID übergeben.', + 'uuid.uuid' => 'Die übergebene UUID ist ungültig.', + 'uuid.exists' => 'Die zu löschende Gruppe existiert nicht.' + ]; + } + + /** + * @return RedirectResponse + */ + public function success(): RedirectResponse + { + return redirect()->route('admin-groups')->with([ + 'success' => 'Die Gruppe wurde erfolgreich gelöscht.', + 'alert-options' => 'aside' + ]); + } + + /** + * @return RedirectResponse + */ + public function failed(): RedirectResponse + { + return redirect()->route('admin-groups')->with([ + 'error' => 'Die Gruppe konnte aufgrund einer technischen Störung nicht gelöscht werden.' + ]); + } +} diff --git a/app/Modules/Group/UI/Web/Requests/Edit.php b/app/Modules/Group/UI/Web/Requests/Edit.php new file mode 100644 index 0000000..450bb59 --- /dev/null +++ b/app/Modules/Group/UI/Web/Requests/Edit.php @@ -0,0 +1,54 @@ + 'required|uuid|exists:groups,uuid' + ]; + } + + /** + * @return array + */ + public function messages(): array + { + return [ + 'uuid.required' => 'Es wurde keine UUID übergeben.', + 'uuid.uuid' => 'Die übergebene UUID ist ungültig.', + 'uuid.exists' => 'Die zu bearbeitende Gruppe existiert nicht.' + ]; + } + + /** + * @param null $keys + * @return array + */ + public function all($keys = null): array + { + $data = parent::all($keys); + $data['uuid'] = $this->route('uuid'); + + return $data; + } +} diff --git a/app/Modules/Group/UI/Web/Requests/Store.php b/app/Modules/Group/UI/Web/Requests/Store.php new file mode 100644 index 0000000..a105fc6 --- /dev/null +++ b/app/Modules/Group/UI/Web/Requests/Store.php @@ -0,0 +1,69 @@ + 'required|max:255', + 'priority' => 'required|integer', + 'color' => 'required|regex:/^#[a-zA-Z0-9]{6}/i', + ]; + } + + /** + * @return array + */ + public function messages(): array + { + return [ + 'group.required' => 'Bitte geben Sie eine Gruppenbezeichnung an!', + 'group.max' => 'Die angegebene Gruppenbezeichnung ist zu lang (max. :max Zeichen).', + 'priority.required' => 'Bitte geben Sie eine Gruppenpriorität an!', + 'priority.integer' => 'Die angegebene Gruppenpriorität ist keine Zahl.', + 'color.required' => 'Bitte geben Sie eine Gruppenfarbe an!', + 'color.regex' => 'Die angegebene Gruppenfarbe hat ein ungültiges Format.' + ]; + } + + /** + * @return RedirectResponse + */ + public function success(): RedirectResponse + { + return redirect()->route('admin-groups')->with([ + 'success' => 'Die Gruppe wurde erfolgreich erstellt.', + 'alert-options' => 'aside' + ]); + } + + /** + * @return RedirectResponse + */ + public function failed(): RedirectResponse + { + return redirect()->route('admin-groups')->with([ + 'failed' => 'Die Gruppe konnte aufgrund einer technischen Störung nicht erstellt werden.' + ])->withInput(); + } +} diff --git a/app/Modules/Group/UI/Web/Requests/Update.php b/app/Modules/Group/UI/Web/Requests/Update.php new file mode 100644 index 0000000..5e65c93 --- /dev/null +++ b/app/Modules/Group/UI/Web/Requests/Update.php @@ -0,0 +1,73 @@ + 'required|uuid|exists:groups,uuid', + 'group' => 'required|max:255', + 'priority' => 'required|integer', + 'color' => 'required|regex:/^#[a-zA-Z0-9]{6}/i', + ]; + } + + /** + * @return array + */ + public function messages(): array + { + return [ + 'uuid.required' => 'Es wurde keine UUID übergeben.', + 'uuid.uuid' => 'Die übergebene UUID ist ungültig.', + 'uuid.exists' => 'Die zu bearbeitende Gruppe existiert nicht.', + 'group.required' => 'Bitte geben Sie eine Gruppenbezeichnung an!', + 'group.max' => 'Die angegebene Gruppenbezeichnung ist zu lang (max. :max Zeichen).', + 'priority.required' => 'Bitte geben Sie eine Gruppenpriorität an!', + 'priority.integer' => 'Die angegebene Gruppenpriorität ist keine Zahl.', + 'color.required' => 'Bitte geben Sie eine Gruppenfarbe an!', + 'color.regex' => 'Die angegebene Gruppenfarbe hat ein ungültiges Format.' + ]; + } + + /** + * @return RedirectResponse + */ + public function success(): RedirectResponse + { + return redirect()->route('admin.groups.edit', [$this->post('uuid')])->with([ + 'success' => 'Die Gruppe wurde erfolgreich bearbeitet.', + 'alert-options' => 'aside' + ]); + } + + /** + * @return RedirectResponse + */ + public function failed(): RedirectResponse + { + return redirect()->route('admin.groups.edit', [$this->post('uuid')])->with([ + 'error' => 'Die Gruppe konnte aufgrund einer technischen Störung nicht bearbeitet werden.' + ])->withInput(); + } +} diff --git a/app/Modules/Group/UI/Web/Views/admin/create-edit.blade.php b/app/Modules/Group/UI/Web/Views/admin/create-edit.blade.php new file mode 100644 index 0000000..d2a02af --- /dev/null +++ b/app/Modules/Group/UI/Web/Views/admin/create-edit.blade.php @@ -0,0 +1,28 @@ +@php /** @var LaraBB\Group\Models\Group $group */ @endphp +@extends('admin::Layouts.master') +@section('content') +
+ @include('partials.messages') +
+ @csrf + +
+
+ + +
+
+ + +
+
+ + +
+
+ @include('partials.button', ['context' => 'primary', 'type' => 'submit', 'icon' => 'save', 'label' => 'Speichern']) +
+
+
+
+@stop diff --git a/app/Modules/Group/UI/Web/Views/admin/index.blade.php b/app/Modules/Group/UI/Web/Views/admin/index.blade.php new file mode 100644 index 0000000..8f13f00 --- /dev/null +++ b/app/Modules/Group/UI/Web/Views/admin/index.blade.php @@ -0,0 +1,46 @@ +@php /** @var LaraBB\Group\Models\Group $group */ @endphp +@extends('admin::Layouts.master') +@section('content') +
+ @include('partials.messages') + @include('partials.button', ['context' => 'primary', 'href' => 'admin.groups.create', 'parameters' => [], 'icon' => 'plus', 'label' => 'Neue Gruppe erstellen']) +
+
Gruppe
+
Farbe
+
Priorität
+
+ + @forelse($groups as $group) +
+ +
+
+
 
+
+
+
{{ $group->priority }}
+
+
+ @csrf + + +
+
+
+ @if(!$loop->last)
@endif + @empty +
+
+ Es sind kein Gruppen in der Datenbank vorhanden. +
+
+ @endforelse + @include('partials.button', ['context' => 'primary', 'href' => 'admin.groups.create', 'parameters' => [], 'icon' => 'plus', 'label' => 'Neue Gruppe erstellen']) +
+@stop diff --git a/app/Modules/Group/UI/Web/routes.php b/app/Modules/Group/UI/Web/routes.php new file mode 100644 index 0000000..3c366ff --- /dev/null +++ b/app/Modules/Group/UI/Web/routes.php @@ -0,0 +1,20 @@ + 'Admin', + 'prefix' => 'admin/user/group', + 'middleware' => [ + 'auth', + CheckAdmin::class + ] +], function() { + Route::get('/', OverviewHandler::class)->name('admin.groups'); + Route::get('create', CreateHandler::class)->name('admin.groups.create'); + Route::get('{uuid}', EditHandler::class)->name('admin.groups.edit'); + Route::post('store', StoreHandler::class)->name('admin.groups.store'); + Route::post('update', UpdateHandler::class)->name('admin.groups.update'); + Route::post('destroy', DestroyHandler::class)->name('admin.groups.destroy'); +}); diff --git a/app/Modules/Group/module.php b/app/Modules/Group/module.php new file mode 100644 index 0000000..4beccd1 --- /dev/null +++ b/app/Modules/Group/module.php @@ -0,0 +1,8 @@ + 'LaraBB\Group\UI\Web\Handlers', + 'middleware' => [ + 'web', + ] +], __DIR__ . '/UI/Web/routes.php'); diff --git a/app/Modules/Invite/Data/MIgrations/2020_07_12_143854_create_users_invites_table.php b/app/Modules/Invite/Data/MIgrations/2020_07_12_143854_create_users_invites_table.php new file mode 100644 index 0000000..e25f77a --- /dev/null +++ b/app/Modules/Invite/Data/MIgrations/2020_07_12_143854_create_users_invites_table.php @@ -0,0 +1,40 @@ +increments('id'); + $table->uuid('uuid')->unique('uuid'); + $table->dateTime('created_at'); + $table->uuid('created_uuid')->index('created_uuid'); + $table->dateTime('updated_at'); + $table->uuid('updated_uuid')->index('updated_uuid'); + $table->uuid('user_uuid')->index('user_uuid'); + $table->dateTime('valid_until')->nullable(); + $table->text('email_encrypted')->nullable(); + $table->string('code', 255)->index('code'); + $table->boolean('used')->default(0); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('users_invites'); + } +} diff --git a/app/Modules/Invite/Models/Invite.php b/app/Modules/Invite/Models/Invite.php new file mode 100644 index 0000000..d6aee2b --- /dev/null +++ b/app/Modules/Invite/Models/Invite.php @@ -0,0 +1,22 @@ +invite->query()->with($with)->where('code', $code)->get()->first(); + } +} diff --git a/app/Modules/Invite/UI/Web/routes.php b/app/Modules/Invite/UI/Web/routes.php new file mode 100644 index 0000000..b3d9bbc --- /dev/null +++ b/app/Modules/Invite/UI/Web/routes.php @@ -0,0 +1 @@ + 'LaraBB\Invite\UI\Web\Handlers', + 'middleware' => [ + 'web', + ], + 'prefix' => 'invite' +], __DIR__ . '/UI/Web/routes.php'); diff --git a/app/Modules/Peer/Data/Migrations/2023_03_19_024140_create_peers_table.php b/app/Modules/Peer/Data/Migrations/2023_03_19_024140_create_peers_table.php new file mode 100644 index 0000000..9a8f0b0 --- /dev/null +++ b/app/Modules/Peer/Data/Migrations/2023_03_19_024140_create_peers_table.php @@ -0,0 +1,41 @@ +id(); + $table->uuid('uuid')->unique('uuid'); + $table->datetime('created_at'); + $table->uuid('created_uuid')->index('created_uuid'); + $table->datetime('updated_at'); + $table->uuid('updated_uuid')->index('updated_uuid'); + $table->uuid('torrent_uuid')->index('torrent_uuid'); + $table->string('peer_id', 255)->index('peer_id'); + $table->string('ip', 255); + $table->smallInteger('port')->default(0); + $table->tinyInteger('status')->default(1); + $table->tinyInteger('natuser')->default(0); + $table->string('client', 255); + $table->string('dns', 255); + $table->bigInteger('uploaded')->default(0); + $table->bigInteger('downloaded')->default(0); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('peers'); + } +}; diff --git a/app/Modules/Peer/Models/Peer.php b/app/Modules/Peer/Models/Peer.php new file mode 100644 index 0000000..094626b --- /dev/null +++ b/app/Modules/Peer/Models/Peer.php @@ -0,0 +1,42 @@ +delete(); + } +} diff --git a/app/Modules/Peer/Tasks/FindTask.php b/app/Modules/Peer/Tasks/FindTask.php new file mode 100644 index 0000000..795c2d7 --- /dev/null +++ b/app/Modules/Peer/Tasks/FindTask.php @@ -0,0 +1,82 @@ +query)) { + $this->query = $this->peer->query(); + } + + /** @var Collection $return */ + $data = $this->query->with($with)->get(); + + if(is_null($data)) { + return null; + } + + return $this->return == 'Model' ? $data->first() : $data; + } + + /** + * @param $peer_id + * @param $torrentUuid + * @param array $with + * @return Peer|Collection|null + */ + public function byPeerIdAndTorrentUuid($peer_id, $torrentUuid, array $with = []): Peer|Collection|null + { + $this->return = 'Model'; + $this->query = $this->peer->query()->where([ + ['peer_id', '=', $peer_id], + ['torrent_uuid', '=', $torrentUuid] + ]); + + return $this->run($with); + } + + /** + * @param $torrentUuid + * @param array $with + * @return Collection|null + */ + public function byTorrentUuid($torrentUuid, array $with = []): Collection|null + { + $this->return = 'Collection'; + $this->query = $this->peer->query()->where('torrent_uuid', $torrentUuid); + + return $this->run($with); + } +} diff --git a/app/Modules/Peer/Tasks/StoreTask.php b/app/Modules/Peer/Tasks/StoreTask.php new file mode 100644 index 0000000..712a57c --- /dev/null +++ b/app/Modules/Peer/Tasks/StoreTask.php @@ -0,0 +1,45 @@ +peer->created_uuid = $data['created_uuid']; + $this->peer->updated_uuid = $data['updated_uuid']; + $this->peer->torrent_uuid = $data['torrent_uuid']; + $this->peer->peer_id = $data['peer_id']; + $this->peer->ip = $data['ip']; + $this->peer->port = $data['port']; + $this->peer->status = $data['status']; + $this->peer->natuser = $data['natuser']; + $this->peer->client = $data['client']; + $this->peer->dns = $data['dns']; + $this->peer->uploaded = $data['uploaded']; + $this->peer->downloaded = $data['downloaded']; + + if($this->peer->save()) { + return $this->peer; + } + + return false; + } +} diff --git a/app/Modules/Peer/Tasks/UpdateTask.php b/app/Modules/Peer/Tasks/UpdateTask.php new file mode 100644 index 0000000..0680d97 --- /dev/null +++ b/app/Modules/Peer/Tasks/UpdateTask.php @@ -0,0 +1,30 @@ +updated_uuid = $data['updated_uuid'] ?? $peer->updated_uuid; + $peer->torrent_uuid = $data['torrent_uuid'] ?? $peer->torrent_uuid; + $peer->peer_id = $data['peer_id'] ?? $peer->peer_id; + $peer->ip = $data['ip'] ?? $peer->ip; + $peer->port = $data['port'] ?? $peer->port; + $peer->status = $data['status'] ?? $peer->status; + $peer->natuser = $data['natuser'] ?? $peer->natuser; + $peer->client = $data['client'] ?? $peer->client; + $peer->dns = $data['dns'] ?? $peer->dns; + $peer->uploaded = $data['uploaded'] ?? $peer->uploaded; + $peer->downloaded = $data['downloaded'] ?? $peer->downloaded; + + return $peer->save(); + } +} diff --git a/app/Modules/Peer/module.php b/app/Modules/Peer/module.php new file mode 100644 index 0000000..b3d9bbc --- /dev/null +++ b/app/Modules/Peer/module.php @@ -0,0 +1 @@ +findGroupTask->all()->filter(function (Group $group) use ($request) { + return $request->user()->groups->max('priority') >= $group->priority; + }); + + $users = $this->findUserTask->all(['groups'])->filter(function (User $user) use ($groups) { + return !$user->isInGroup(['Guest']); + }); + + return [ + 'thread' => $request->thread, + 'forum' => $request->thread->forum, + 'groups' => $groups, + 'users' => $users + ]; + } +} diff --git a/app/Modules/Post/Actions/DestroyAction.php b/app/Modules/Post/Actions/DestroyAction.php new file mode 100644 index 0000000..1e9101c --- /dev/null +++ b/app/Modules/Post/Actions/DestroyAction.php @@ -0,0 +1,78 @@ +thread; + + if(!$this->destroyPostTask->run($request->post)) { + return false; + } + + $thread->posts--; + + /** @var Post $lastPost */ + $lastPost = $thread->postings()->latest()->first(); + $this->updateThreadTask->run($thread, [ + 'posts' => $thread->posts, + 'lastpost_uuid' => $lastPost->uuid ?? $thread->firstpost_uuid + ]); + + $this->updateForumTask->run($thread->forum, [ + 'lastpost_uuid' => $lastPost->uuid ?? $thread->firstpost_uuid, + 'posting_count' => $thread->forum->posting_count - 1 + ]); + + if($thread->posts == 0) { + + /** @var Thread $latestThread */ + $latestThread = $thread->forum->threads()->latest()->first(); + + $this->updateForumTask->run($thread->forum, [ + 'lastpost_uuid' => $latestThread->lastpost_uuid, + 'thread_count' => $thread->forum->thread_count - 1 + ]); + + $this->destroyThreadTask->run($thread); + } + + return true; + } +} diff --git a/app/Modules/Post/Actions/EditAction.php b/app/Modules/Post/Actions/EditAction.php new file mode 100644 index 0000000..cd2ef8d --- /dev/null +++ b/app/Modules/Post/Actions/EditAction.php @@ -0,0 +1,50 @@ +findGroupTask->all()->filter(function (Group $group) use ($request) { + return $request->user()->groups->max('priority') >= $group->priority; + }); + + $users = $this->findUserTask->all(['groups'])->filter(function (User $user) use ($groups) { + return !$user->isInGroup(['Guest']); + }); + + return [ + 'groups' => $groups, + 'users' => $users, + 'post' => $request->post, + 'forum' => $request->post->thread->forum + ]; + } +} diff --git a/app/Modules/Post/Actions/StoreAction.php b/app/Modules/Post/Actions/StoreAction.php new file mode 100644 index 0000000..2a70bfd --- /dev/null +++ b/app/Modules/Post/Actions/StoreAction.php @@ -0,0 +1,78 @@ +storePostTask->run($this->preparePostData($request)); + + if (!$post) { + return false; + } + + $post = $this->getPostTask->byUuid($post->uuid); + $this->updateThreadTask->run($request->thread, [ + 'posts' => $request->thread->posts + 1, + 'lastpost_uuid' => $post->uuid + ]); + + $this->updateForumTask->run($request->thread->forum, [ + 'posting_count' => $request->thread->forum->posting_count + 1, + 'lastpost_uuid' => $post->uuid + ]); + + return $post->id; + } + + /** + * @param Store $request + * @return array + */ + private function preparePostData(Store $request): array + { + return [ + 'created_uuid' => $request->user()->uuid, + 'updated_uuid' => $request->user()->uuid, + 'thread_uuid' => $request->post('thread_uuid'), + 'title' => $request->post('title'), + 'content' => $request->post('content'), + 'users' => $this->preparePivotData($request, 'users'), + 'groups' => $this->preparePivotData($request, 'groups') + ]; + } +} diff --git a/app/Modules/Post/Actions/UpdateAction.php b/app/Modules/Post/Actions/UpdateAction.php new file mode 100644 index 0000000..b3021c7 --- /dev/null +++ b/app/Modules/Post/Actions/UpdateAction.php @@ -0,0 +1,83 @@ +post->uuid === $request->post->thread->firstpost_uuid) { + $this->updateThreadTask->run($request->post->thread, $this->prepareThreadData($request)); + + $request->post->thread->load('postings'); + $postings = $request->post->thread->postings->except($request->post->uuid); + + if(!empty($postings)) { + foreach($postings as $post) { + $this->updatePostTask->run($post, ['title' => 'RE: ' . $request->post('title')]); + } + } + } + + return $this->updatePostTask->run($request->post, $this->preparePostData($request)); + } + + /** + * @param Update $request + * @return array + */ + private function preparePostData(Update $request): array + { + return [ + 'updated_uuid' => $request->user()->uuid, + 'thread_uuid' => $request->post('thread_uuid'), + 'content' => $request->post('content'), + 'title' => $request->post('title'), + 'users' => $this->preparePivotData($request, 'users'), + 'groups' => $this->preparePivotData($request, 'groups'), + ]; + } + + /** + * @param Update $request + * @return array + */ + private function prepareThreadData(Update $request): array + { + return [ + 'prefix_uuid' => $request->post('prefix'), + 'title' => $request->post('title'), + 'slug' => Str::slug($request->post('title')) . '-' . $request->post->thread->id, + 'users' => $this->preparePivotData($request, 'users'), + 'groups' => $this->preparePivotData($request, 'groups'), + ]; + } +} diff --git a/app/Modules/Post/Data/Migrations/2020_11_24_164626_create_posts_table.php b/app/Modules/Post/Data/Migrations/2020_11_24_164626_create_posts_table.php new file mode 100644 index 0000000..f3b83e0 --- /dev/null +++ b/app/Modules/Post/Data/Migrations/2020_11_24_164626_create_posts_table.php @@ -0,0 +1,37 @@ +id(); + $table->uuid('uuid')->index('uuid'); + $table->dateTime('created_at'); + $table->uuid('created_uuid')->index('created_uuid'); + $table->dateTime('updated_at'); + $table->uuid('updated_uuid')->index('updated_uuid'); + $table->uuid('thread_uuid')->index('thread_uuid'); + $table->longText('content'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('posts'); + } +} diff --git a/app/Modules/Post/Data/Migrations/2021_06_29_000913_posts_table_add_title.php b/app/Modules/Post/Data/Migrations/2021_06_29_000913_posts_table_add_title.php new file mode 100644 index 0000000..1fb455b --- /dev/null +++ b/app/Modules/Post/Data/Migrations/2021_06_29_000913_posts_table_add_title.php @@ -0,0 +1,32 @@ +string('title', 255)->after('thread_uuid'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('posts', function (Blueprint $table) { + $table->dropColumn('title'); + }); + } +} diff --git a/app/Modules/Post/Data/Migrations/2021_06_29_004324_create_posts_has_users_table.php b/app/Modules/Post/Data/Migrations/2021_06_29_004324_create_posts_has_users_table.php new file mode 100644 index 0000000..6c2893e --- /dev/null +++ b/app/Modules/Post/Data/Migrations/2021_06_29_004324_create_posts_has_users_table.php @@ -0,0 +1,37 @@ +id(); + $table->uuid('uuid')->index('uuid'); + $table->dateTime('created_at'); + $table->uuid('created_uuid')->index('created_uuid'); + $table->dateTime('updated_at'); + $table->uuid('updated_uuid')->index('updated_uuid'); + $table->uuid('post_uuid')->index('post_uuid'); + $table->uuid('user_uuid')->index('user_uuid'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('posts_has_users'); + } +} diff --git a/app/Modules/Post/Data/Migrations/2021_06_29_004333_create_posts_has_groups_table.php b/app/Modules/Post/Data/Migrations/2021_06_29_004333_create_posts_has_groups_table.php new file mode 100644 index 0000000..d1b3a3e --- /dev/null +++ b/app/Modules/Post/Data/Migrations/2021_06_29_004333_create_posts_has_groups_table.php @@ -0,0 +1,37 @@ +id(); + $table->uuid('uuid')->index('uuid'); + $table->dateTime('created_at'); + $table->uuid('created_uuid')->index('created_uuid'); + $table->dateTime('updated_at'); + $table->uuid('updated_uuid')->index('updated_uuid'); + $table->uuid('post_uuid')->index('post_uuid'); + $table->uuid('group_uuid')->index('group_uuid'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('posts_has_groups'); + } +} diff --git a/app/Modules/Post/Data/Migrations/2021_06_29_004342_create_posts_has_users_files_table.php b/app/Modules/Post/Data/Migrations/2021_06_29_004342_create_posts_has_users_files_table.php new file mode 100644 index 0000000..db54069 --- /dev/null +++ b/app/Modules/Post/Data/Migrations/2021_06_29_004342_create_posts_has_users_files_table.php @@ -0,0 +1,37 @@ +id(); + $table->uuid('uuid')->index('uuid'); + $table->dateTime('created_at'); + $table->uuid('created_uuid')->index('created_uuid'); + $table->dateTime('updated_at'); + $table->uuid('updated_uuid')->index('updated_uuid'); + $table->uuid('post_uuid')->index('post_uuid'); + $table->uuid('userfile_uuid')->index('userfile_uuid'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('posts_has_users_files'); + } +} diff --git a/app/Modules/Post/Models/Post.php b/app/Modules/Post/Models/Post.php new file mode 100644 index 0000000..6570651 --- /dev/null +++ b/app/Modules/Post/Models/Post.php @@ -0,0 +1,76 @@ +belongsTo(Thread::class, 'thread_uuid', 'uuid'); + } + + /** + * @return BelongsToMany + */ + public function groups(): BelongsToMany + { + return $this->belongsToMany(Group::class, 'posts_has_groups', 'post_uuid', 'group_uuid'); + } + + /** + * @return BelongsToMany + */ + public function users(): BelongsToMany + { + return $this->belongsTomany(User::class, 'posts_has_users', 'post_uuid', 'user_uuid'); + } + + /** + * @return BelongsToMany + */ + public function files(): BelongsToMany + { + return $this->belongsTomany(Userfile::class, 'posts_has_users_files', 'post_uuid', 'userfile_uuid'); + } +} diff --git a/app/Modules/Post/ServiceProvider.php b/app/Modules/Post/ServiceProvider.php new file mode 100644 index 0000000..60c4b73 --- /dev/null +++ b/app/Modules/Post/ServiceProvider.php @@ -0,0 +1,21 @@ +users()->detach(); + $post->groups()->detach(); + + return $post->delete(); + } +} diff --git a/app/Modules/Post/Tasks/FindTask.php b/app/Modules/Post/Tasks/FindTask.php new file mode 100644 index 0000000..fbef9b2 --- /dev/null +++ b/app/Modules/Post/Tasks/FindTask.php @@ -0,0 +1,68 @@ +query)) { + $this->query = $this->prefix->query(); + } + + /** @var Collection $data */ + $data = $this->query->with($with)->get(); + + if(is_null($data)) { + return null; + } + + return $this->return == 'Model' ? $data->first() : $data; + } + + + /** + * @param $uuid + * @param array $with + * @return Post|Closure|Collection|null + */ + public function byUuid($uuid, array $with = []): Post|Collection|Closure|null + { + $this->return = 'Model'; + $this->query = $this->post->query()->where('uuid', $uuid); + + return $this->run($with); + } +} diff --git a/app/Modules/Post/Tasks/StoreTask.php b/app/Modules/Post/Tasks/StoreTask.php new file mode 100644 index 0000000..3e12411 --- /dev/null +++ b/app/Modules/Post/Tasks/StoreTask.php @@ -0,0 +1,42 @@ +post->created_uuid = $data['created_uuid']; + $this->post->updated_uuid = $data['updated_uuid']; + $this->post->thread_uuid = $data['thread_uuid']; + $this->post->title = $data['title']; + $this->post->content = $data['content']; + + if($this->post->save()) { + $this->post->users()->sync($data['users'] ?? []); + $this->post->groups()->sync($data['groups'] ?? []); + + return $this->post; + } + + return false; + } +} diff --git a/app/Modules/Post/Tasks/UpdateTask.php b/app/Modules/Post/Tasks/UpdateTask.php new file mode 100644 index 0000000..ead5f6b --- /dev/null +++ b/app/Modules/Post/Tasks/UpdateTask.php @@ -0,0 +1,34 @@ +updated_uuid = $data['updated_uuid'] ?? $post->updated_uuid; + $post->thread_uuid = $data['thread_uuid'] ?? $post->thread_uuid; + $post->title = $data['title'] ?? $post->title; + $post->content = $data['content'] ?? $post->content; + + if($post->save()) { + $post->users()->sync($data['users'] ?? []); + $post->groups()->sync($data['groups'] ?? []); + + return true; + } + + return false; + } +} diff --git a/app/Modules/Post/UI/Web/Handlers/CreateHandler.php b/app/Modules/Post/UI/Web/Handlers/CreateHandler.php new file mode 100644 index 0000000..8d2599e --- /dev/null +++ b/app/Modules/Post/UI/Web/Handlers/CreateHandler.php @@ -0,0 +1,41 @@ +view->make('post::create-edit', array_merge( + ['edit' => false], + $this->createAction->run($request) + )); + } +} diff --git a/app/Modules/Post/UI/Web/Handlers/DestroyHandler.php b/app/Modules/Post/UI/Web/Handlers/DestroyHandler.php new file mode 100644 index 0000000..ae2b929 --- /dev/null +++ b/app/Modules/Post/UI/Web/Handlers/DestroyHandler.php @@ -0,0 +1,35 @@ +destroyAction->run($request) ? $request->success() : $request->failed(); + } +} diff --git a/app/Modules/Post/UI/Web/Handlers/EditHandler.php b/app/Modules/Post/UI/Web/Handlers/EditHandler.php new file mode 100644 index 0000000..2811812 --- /dev/null +++ b/app/Modules/Post/UI/Web/Handlers/EditHandler.php @@ -0,0 +1,41 @@ +view->make('post::create-edit', array_merge( + ['edit' => true], + $this->editAction->run($request) + )); + } +} diff --git a/app/Modules/Post/UI/Web/Handlers/StoreHandler.php b/app/Modules/Post/UI/Web/Handlers/StoreHandler.php new file mode 100644 index 0000000..3c8efbf --- /dev/null +++ b/app/Modules/Post/UI/Web/Handlers/StoreHandler.php @@ -0,0 +1,33 @@ +storeAction->run($request); + + return $postId ? $request->success($postId) : $request->failed(); + } +} diff --git a/app/Modules/Post/UI/Web/Handlers/UpdateHandler.php b/app/Modules/Post/UI/Web/Handlers/UpdateHandler.php new file mode 100644 index 0000000..dc11787 --- /dev/null +++ b/app/Modules/Post/UI/Web/Handlers/UpdateHandler.php @@ -0,0 +1,33 @@ +updateAction->run($request) ? $request->success() : $request->failed(); + } +} diff --git a/app/Modules/Post/UI/Web/Requests/Create.php b/app/Modules/Post/UI/Web/Requests/Create.php new file mode 100644 index 0000000..7b87e25 --- /dev/null +++ b/app/Modules/Post/UI/Web/Requests/Create.php @@ -0,0 +1,53 @@ +thread = $getThreadTask->bySlug($this->route('slug'), ['forum']); + if(is_null($this->thread)) { + abort(404, __('The desired thread does not exist.')); + } + + if(!$this->user()->forumPermissions[$this->thread->forum_uuid]->create_posts) { + abort(403, __('You are not authorized to create postings in this forum.')); + } + + return true; + } + + /** + * @return array + */ + public function rules(): array + { + return []; + } + + /** + * @return array + */ + public function messages(): array + { + return []; + } +} diff --git a/app/Modules/Post/UI/Web/Requests/Destroy.php b/app/Modules/Post/UI/Web/Requests/Destroy.php new file mode 100644 index 0000000..67c9878 --- /dev/null +++ b/app/Modules/Post/UI/Web/Requests/Destroy.php @@ -0,0 +1,94 @@ +post = $getPostTask->byUuid($this->post('uuid'), [ + 'thread.forum' + ]); + + if(is_null($this->post)) { + abort(404, __('The posting to be deleted does not exist.')); + } + + $this->thread = $this->post->thread; + + if (!$this->user()->forumPermissions[$this->post->thread->forum_uuid]->delete_posts || $this->post->created_uuid !== $this->user()->uuid) { + abort(403, __('You are not authorized to delete this posting.')); + } + + return true; + } + + /** + * @return array + */ + public function rules(): array + { + return [ + 'uuid' => 'uuid' + ]; + } + + /** + * @return array + */ + public function messages(): array + { + return [ + 'uuid.uuid' => __('The provided UUID has an incorrect format.'), + ]; + } + + + /** + * @return RedirectResponse + */ + public function success(): RedirectResponse + { + $redirectRoute = $this->thread->posts > 0 ? 'thread' : 'forum'; + $redirectParam = $this->thread->posts > 0 ? $this->thread->slug : ''; + + return redirect()->route($redirectRoute, [$redirectParam])->with([ + 'success' => __('The posting was deleted successfully.') + ]); + } + + /** + * @return RedirectResponse + */ + public function failed(): RedirectResponse + { + return redirect()->route('thread', [$this->thread->slug])->with([ + 'error' => __('The posting could not be deleted due to technical difficulties.') + ]); + } +} diff --git a/app/Modules/Post/UI/Web/Requests/Edit.php b/app/Modules/Post/UI/Web/Requests/Edit.php new file mode 100644 index 0000000..8d6126e --- /dev/null +++ b/app/Modules/Post/UI/Web/Requests/Edit.php @@ -0,0 +1,71 @@ +post = $getPostTask->byUuid($this->route('uuid'), ['thread.forum']); + + if(is_null($this->post)) { + abort(404, __('The posting to be edited does not exist.')); + } + + if(!$this->user()->forumPermissions[$this->post->thread->forum_uuid]->edit_posts || $this->post->created_uuid !== $this->user()->uuid) { + abort(403, __('You are not authorized to edit this posting.')); + } + + return true; + } + + /** + * @return string[] + */ + public function rules(): array + { + return [ + 'uuid' => 'uuid' + ]; + } + + /** + * @return array + */ + public function messages(): array + { + return [ + 'uuid.uuid' => __('The provided UUID has an incorrect format.'), + ]; + } + + /** + * @param null $keys + * @return array + */ + public function all($keys = null): array + { + $data = parent::all($keys); + $data['uuid'] = $this->route('uuid'); + + return $data; + } +} diff --git a/app/Modules/Post/UI/Web/Requests/Store.php b/app/Modules/Post/UI/Web/Requests/Store.php new file mode 100644 index 0000000..c29ed52 --- /dev/null +++ b/app/Modules/Post/UI/Web/Requests/Store.php @@ -0,0 +1,81 @@ +thread = $getThreadTask->byUuid($this->post('thread_uuid'), ['forum']); + + if(!$this->user()->forumPermissions[$this->thread->forum_uuid]->create_posts) { + abort(403, __('You are not authorized to create posts in this thread.')); + } + + return true; + } + + /** + * @return string[] + */ + public function rules(): array + { + return [ + 'thread_uuid' => 'required|uuid|exists:threads,uuid', + 'title' => 'required|min:5', + 'content' => 'required|min:20' + ]; + } + + /** + * @return array + */ + public function messages(): array + { + return [ + 'thread_uuid.required' => __('No UUID was passed.'), + 'thread_uuid.uuid' => __('The given UUID is invalid.'), + 'thread_uuid.exists' => __('The desired thread does not exist.'), + 'title.required' => __('Please enter a title!'), + 'title.min' => __('The title must be at least :min characters long.'), + 'content.required' => __('Please enter a content!'), + 'content.min' => __('The content must be at least :min characters long.') + ]; + } + + /** + * @return RedirectResponse + */ + public function failed(): RedirectResponse + { + return redirect()->route('reply', [$this->thread->slug])->with([ + 'error' => __('Your posting could not be created due to a technical problem.') + ]); + } + + /** + * @param int $postId + * @return RedirectResponse + */ + public function success(int $postId): RedirectResponse + { + return redirect()->route('thread', [$this->thread->slug, '#post-' . $postId])->with([ + 'success' => __('Your post was successfully created.') + ]); + } +} diff --git a/app/Modules/Post/UI/Web/Requests/Update.php b/app/Modules/Post/UI/Web/Requests/Update.php new file mode 100644 index 0000000..79f50c9 --- /dev/null +++ b/app/Modules/Post/UI/Web/Requests/Update.php @@ -0,0 +1,88 @@ +post = $getPostTask->byUuid($this->post('uuid'), ['thread']); + + if(is_null($this->post)) { + abort(404, __('The posting to be updated does not exist.')); + } + + if(!$this->user()->forumPermissions[$this->post->thread->forum_uuid]->edit_posts || $this->post->created_uuid != $this->user()->uuid) { + abort(403, __('You are not authorized to edit this posting.')); + } + + return true; + } + + /** + * @return string[] + */ + public function rules(): array + { + return [ + 'uuid' => 'required|uuid', + 'title' => 'required|min:5', + 'content' => 'required|min:20' + ]; + } + + /** + * @return array + */ + public function messages(): array + { + return [ + 'uuid.required' => __('Please provide a UUID.'), + 'uuid.uuid' => __('The provided UUID has an incorrect format.'), + 'title.required' => __('Please enter a title!'), + 'title.min' => __('The title must be at least :min characters long.'), + 'content.required' => __('Please enter a content!'), + 'content.min' => __('The content must be at least :min characters long.') + ]; + } + + /** + * @return RedirectResponse + */ + public function success(): RedirectResponse + { + return redirect()->route('thread', [$this->post->thread->slug, '#post-' . $this->post->id])->with([ + 'success' => __('The posting was updated successfully.') + ]); + } + + /** + * @return RedirectResponse + */ + public function failed(): RedirectResponse + { + return redirect()->route('post-edit', [$this->post('uuid')])->with([ + 'error' => __('The post could not be updated due to technical difficulties.') + ])->withInput(); + } +} diff --git a/app/Modules/Post/UI/Web/Views/create-edit.blade.php b/app/Modules/Post/UI/Web/Views/create-edit.blade.php new file mode 100644 index 0000000..0d8b190 --- /dev/null +++ b/app/Modules/Post/UI/Web/Views/create-edit.blade.php @@ -0,0 +1,108 @@ +@extends('layouts.master') +@section('pagecss') + +@stop +@section('content') + + +
+ @csrf + + @if($edit) + + @endif +
+ @include('partials.messages') + @if(isset($post) && $post->thread->firstpost_uuid === $post->uuid) +
+
+ +
+
+ +
+
+ @else +
+ +
+ @endif +
+ + +
+
+
+ +
+
+ +
+
+
+ +
+
+@stop +@section('pagejs') + +@stop diff --git a/app/Modules/Post/UI/Web/routes.php b/app/Modules/Post/UI/Web/routes.php new file mode 100644 index 0000000..b77add1 --- /dev/null +++ b/app/Modules/Post/UI/Web/routes.php @@ -0,0 +1,24 @@ + [ + SetUser::class + ], + 'prefix' => 'thread/{slug}' +], function() { + Route::get('reply', CreateHandler::class)->name('reply'); +}); + +Route::group([ + 'middleware' => [ + SetUser::class + ], + 'prefix' => 'post' +], function() { + Route::get('{uuid}', EditHandler::class)->name('post-edit'); + Route::post('store', StoreHandler::class)->name('post-store'); + Route::post('update', UpdateHandler::class)->name('post-update'); + Route::post('destroy', DestroyHandler::class)->name('post-destroy'); +}); diff --git a/app/Modules/Post/module.php b/app/Modules/Post/module.php new file mode 100644 index 0000000..b4e5a8b --- /dev/null +++ b/app/Modules/Post/module.php @@ -0,0 +1,8 @@ + 'LaraBB\Post\UI\Web\Handlers', + 'middleware' => [ + 'web', + ] +], __DIR__ . '/UI/Web/routes.php'); diff --git a/app/Modules/Profile/Actions/Admin/EditAction.php b/app/Modules/Profile/Actions/Admin/EditAction.php new file mode 100644 index 0000000..c2b262a --- /dev/null +++ b/app/Modules/Profile/Actions/Admin/EditAction.php @@ -0,0 +1,30 @@ +findUserTask->byUuid($request->route('uuid'), ['profile']); + } +} diff --git a/app/Modules/Profile/Models/Profile.php b/app/Modules/Profile/Models/Profile.php new file mode 100644 index 0000000..8bb12d8 --- /dev/null +++ b/app/Modules/Profile/Models/Profile.php @@ -0,0 +1,63 @@ +profile->user_uuid = $data['user_uuid']; + $this->profile->created_uuid = $data['created_uuid']; + $this->profile->updated_uuid = $data['updated_uuid']; + + return $this->profile->save(); + } +} diff --git a/app/Modules/Profile/Tasks/UpdateTask.php b/app/Modules/Profile/Tasks/UpdateTask.php new file mode 100644 index 0000000..a3d4d84 --- /dev/null +++ b/app/Modules/Profile/Tasks/UpdateTask.php @@ -0,0 +1,22 @@ +uploaded = $data['uploaded'] ?? $profile->uploaded; + $profile->downloaded = $data['downloaded'] ?? $profile->downloaded; + $profile->ratio = $data['ratio'] ?? $profile->ratio; + + return $profile->save(); + } +} diff --git a/app/Modules/Profile/UI/Web/Handlers/Admin/EditHandler.php b/app/Modules/Profile/UI/Web/Handlers/Admin/EditHandler.php new file mode 100644 index 0000000..05498df --- /dev/null +++ b/app/Modules/Profile/UI/Web/Handlers/Admin/EditHandler.php @@ -0,0 +1,40 @@ +editAction->run($request); + + return $this->view->make('profile::admin.create-edit', [ + 'user' => $user, + 'active' => 'users', + 'subactive' => 'profile' + ]); + } +} diff --git a/app/Modules/Profile/UI/Web/Handlers/Admin/UpdateHandler.php b/app/Modules/Profile/UI/Web/Handlers/Admin/UpdateHandler.php new file mode 100644 index 0000000..fa01b50 --- /dev/null +++ b/app/Modules/Profile/UI/Web/Handlers/Admin/UpdateHandler.php @@ -0,0 +1,18 @@ + 'required|uuid|exists:users_profiles,user_uuid', + ]; + } + + /** + * @return string[] + */ + public function messages(): array + { + return [ + 'uuid.required' => 'Es wurde keine UUID übergeben.', + 'uuid.uuid' => 'Die übergebene UUID ist ungültig.', + 'uuid.exists' => 'Das zu bearbeitende Benutzerprofil existiert nicht.', + ]; + } + + /** + * @param null $keys + * @return array + */ + public function all($keys = null): array + { + $data = parent::all($keys); + $data['uuid'] = $this->route('uuid'); + + return $data; + } +} diff --git a/app/Modules/Profile/UI/Web/Views/admin/create-edit.blade.php b/app/Modules/Profile/UI/Web/Views/admin/create-edit.blade.php new file mode 100644 index 0000000..59ff411 --- /dev/null +++ b/app/Modules/Profile/UI/Web/Views/admin/create-edit.blade.php @@ -0,0 +1,33 @@ +@extends('admin::Layouts.master') +@section('content') +
+ @include('partials.messages') + +
+ @csrf +
+ + +
+
+
+@stop diff --git a/app/Modules/Profile/UI/Web/routes.php b/app/Modules/Profile/UI/Web/routes.php new file mode 100644 index 0000000..5b50357 --- /dev/null +++ b/app/Modules/Profile/UI/Web/routes.php @@ -0,0 +1,12 @@ + 'user/profile'], function() { + +}); + +Route::group([ + 'namespace' => 'Admin', + 'prefix' => 'admin/user/{uuid}/profile' +], function() { + Route::get('/', EditHandler::class)->name('admin.users.profile'); + Route::post('/', UpdateHandler::class)->name('admin.users.profile.update'); +}); diff --git a/app/Modules/Profile/module.php b/app/Modules/Profile/module.php new file mode 100644 index 0000000..f919e66 --- /dev/null +++ b/app/Modules/Profile/module.php @@ -0,0 +1,8 @@ + 'LaraBB\Profile\UI\Web\Handlers', + 'middleware' => [ + 'web', + ] +], __DIR__ . '/UI/Web/routes.php'); diff --git a/app/Modules/Settings/Actions/Prefix/CreateAction.php b/app/Modules/Settings/Actions/Prefix/CreateAction.php new file mode 100644 index 0000000..e7560f7 --- /dev/null +++ b/app/Modules/Settings/Actions/Prefix/CreateAction.php @@ -0,0 +1,31 @@ + 'settings', + 'forums' => $this->findForumTask->run() + ]; + } +} diff --git a/app/Modules/Settings/Actions/Prefix/DestroyAction.php b/app/Modules/Settings/Actions/Prefix/DestroyAction.php new file mode 100644 index 0000000..063c742 --- /dev/null +++ b/app/Modules/Settings/Actions/Prefix/DestroyAction.php @@ -0,0 +1,51 @@ +findPrefixTask->byUuid($request->post('uuid')); + + try { + $this->connection->transaction(function() use($prefix) { + $this->destroyPrefixTask->run($prefix); + }); + } catch (Throwable $t) { + return false; + } + + return true; + } +} diff --git a/app/Modules/Settings/Actions/Prefix/EditAction.php b/app/Modules/Settings/Actions/Prefix/EditAction.php new file mode 100644 index 0000000..bc78c18 --- /dev/null +++ b/app/Modules/Settings/Actions/Prefix/EditAction.php @@ -0,0 +1,39 @@ + 'settings', + 'forums' => $this->findForumTask->all(), + 'prefix' => $this->findPrefixTask->byUuid($request->route('uuid'), ['forums']) + ]; + } +} diff --git a/app/Modules/Settings/Actions/Prefix/OverviewAction.php b/app/Modules/Settings/Actions/Prefix/OverviewAction.php new file mode 100644 index 0000000..d060fda --- /dev/null +++ b/app/Modules/Settings/Actions/Prefix/OverviewAction.php @@ -0,0 +1,31 @@ + 'settings', + 'prefixes' => $this->findPrefixTask->run() + ]; + } +} diff --git a/app/Modules/Settings/Actions/Prefix/StoreAction.php b/app/Modules/Settings/Actions/Prefix/StoreAction.php new file mode 100644 index 0000000..ca8af38 --- /dev/null +++ b/app/Modules/Settings/Actions/Prefix/StoreAction.php @@ -0,0 +1,62 @@ +connection->transaction(function () use($request) { + $this->storePrefixTask->run($this->preparePrefixData($request)); + }); + } catch (Throwable $t) { + return false; + } + + return true; + } + + /** + * @param Store $request + * @return array + */ + private function preparePrefixData(Store $request): array + { + return [ + 'created_uuid' => $request->user()->uuid, + 'updated_uuid' => $request->user()->uuid, + 'prefix' => $request->post('prefix'), + 'display_style' => $request->post('display_style'), + 'forums' => $this->preparePivotData($request, 'forums'), + ]; + } +} diff --git a/app/Modules/Settings/Actions/Prefix/UpdateAction.php b/app/Modules/Settings/Actions/Prefix/UpdateAction.php new file mode 100644 index 0000000..de1ed9a --- /dev/null +++ b/app/Modules/Settings/Actions/Prefix/UpdateAction.php @@ -0,0 +1,66 @@ +getPrefixTask->byUuid($request->post('uuid')); + + try { + $this->connection->transaction(function() use($prefix, $request) { + $this->updatePrefixTask->run($prefix, $this->preparePrefixData($request)); + }); + } catch (Throwable $t) { + return false; + } + + return true; + } + + /** + * @param Update $request + * @return array + */ + private function preparePrefixData(Update $request): array + { + return [ + 'updated_uuid' => $request->user()->uuid, + 'prefix' => $request->post('prefix'), + 'display_style' => $request->post('display_style'), + 'forums' => $this->preparePivotData($request, 'forums'), + ]; + } +} diff --git a/app/Modules/Settings/Data/Migrations/2021_07_02_231125_create_settings_prefixes_table.php b/app/Modules/Settings/Data/Migrations/2021_07_02_231125_create_settings_prefixes_table.php new file mode 100644 index 0000000..1ae8300 --- /dev/null +++ b/app/Modules/Settings/Data/Migrations/2021_07_02_231125_create_settings_prefixes_table.php @@ -0,0 +1,37 @@ +id(); + $table->uuid('uuid')->index('uuid'); + $table->dateTime('created_at'); + $table->uuid('created_uuid')->index('created_uuid'); + $table->dateTime('updated_at'); + $table->uuid('updated_uuid')->index('updated_uuid'); + $table->string('prefix', 255); + $table->string('display_style', 255); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('settings_prefixes'); + } +} diff --git a/app/Modules/Settings/Models/Prefix.php b/app/Modules/Settings/Models/Prefix.php new file mode 100644 index 0000000..68e75a5 --- /dev/null +++ b/app/Modules/Settings/Models/Prefix.php @@ -0,0 +1,61 @@ +belongsToMany(Forum::class, 'forums_has_prefixes', 'prefix_uuid', 'forum_uuid'); + } + + public function threads(): HasMany + { + return $this->hasMany(Thread::class, 'prefix_uuid', 'uuid'); + } +} diff --git a/app/Modules/Settings/ServiceProvider.php b/app/Modules/Settings/ServiceProvider.php new file mode 100644 index 0000000..33a32fc --- /dev/null +++ b/app/Modules/Settings/ServiceProvider.php @@ -0,0 +1,21 @@ +forums()->detach(); + + return $prefix->delete(); + } +} diff --git a/app/Modules/Settings/Tasks/Prefix/FindTask.php b/app/Modules/Settings/Tasks/Prefix/FindTask.php new file mode 100644 index 0000000..c7cebf9 --- /dev/null +++ b/app/Modules/Settings/Tasks/Prefix/FindTask.php @@ -0,0 +1,64 @@ +query)) { + $this->query = $this->prefix->query(); + } + + /** @var Collection $data */ + $data = $this->query->with($with)->get(); + + if(is_null($data)) { + return null; + } + + return $this->return == 'Model' ? $data->first() : $data; + } + + /** + * @param $uuid + * @param array $with + * @return Collection|Prefix|null + */ + public function byUuid($uuid, array $with = []): Collection|Prefix|null + { + $this->return = 'Model'; + $this->query = $this->prefix->query()->where('uuid', $uuid); + + return $this->run($with); + } +} diff --git a/app/Modules/Settings/Tasks/Prefix/StoreTask.php b/app/Modules/Settings/Tasks/Prefix/StoreTask.php new file mode 100644 index 0000000..d9c3308 --- /dev/null +++ b/app/Modules/Settings/Tasks/Prefix/StoreTask.php @@ -0,0 +1,41 @@ +prefix->created_uuid = $data['created_uuid']; + $this->prefix->updated_uuid = $data['updated_uuid']; + $this->prefix->prefix = $data['prefix']; + $this->prefix->display_style = $data['display_style']; + + if($this->prefix->save()) { + $this->prefix->forums()->syncWithoutDetaching($data['forums'] ?? []); + + return true; + } + + return false; + } +} diff --git a/app/Modules/Settings/Tasks/Prefix/UpdateTask.php b/app/Modules/Settings/Tasks/Prefix/UpdateTask.php new file mode 100644 index 0000000..ea515b3 --- /dev/null +++ b/app/Modules/Settings/Tasks/Prefix/UpdateTask.php @@ -0,0 +1,31 @@ +updated_uuid = $data['updated_uuid']; + $prefix->prefix = $data['prefix'] ?? $prefix->prefix; + $prefix->display_style = $data['display_style'] ?? $prefix->display_style; + if($prefix->save()) { + $prefix->forums()->sync($data['forums'] ?? []); + + return true; + } + + return false; + } +} diff --git a/app/Modules/Settings/UI/Web/Handlers/Admin/OverviewHandler.php b/app/Modules/Settings/UI/Web/Handlers/Admin/OverviewHandler.php new file mode 100644 index 0000000..1bd53b4 --- /dev/null +++ b/app/Modules/Settings/UI/Web/Handlers/Admin/OverviewHandler.php @@ -0,0 +1,30 @@ +view->make('settings::admin.index', [ + 'active' => 'settings' + ]); + } +} diff --git a/app/Modules/Settings/UI/Web/Handlers/Admin/Prefix/CreateHandler.php b/app/Modules/Settings/UI/Web/Handlers/Admin/Prefix/CreateHandler.php new file mode 100644 index 0000000..54b2c6b --- /dev/null +++ b/app/Modules/Settings/UI/Web/Handlers/Admin/Prefix/CreateHandler.php @@ -0,0 +1,32 @@ +view->make('settings::admin.prefix.create-edit', $this->createAction->run()); + } +} diff --git a/app/Modules/Settings/UI/Web/Handlers/Admin/Prefix/DestroyHandler.php b/app/Modules/Settings/UI/Web/Handlers/Admin/Prefix/DestroyHandler.php new file mode 100644 index 0000000..36fd8b7 --- /dev/null +++ b/app/Modules/Settings/UI/Web/Handlers/Admin/Prefix/DestroyHandler.php @@ -0,0 +1,34 @@ +destroyAction->run($request) ? $request->success() : $request->failed(); + } +} diff --git a/app/Modules/Settings/UI/Web/Handlers/Admin/Prefix/EditHandler.php b/app/Modules/Settings/UI/Web/Handlers/Admin/Prefix/EditHandler.php new file mode 100644 index 0000000..8ee5fcd --- /dev/null +++ b/app/Modules/Settings/UI/Web/Handlers/Admin/Prefix/EditHandler.php @@ -0,0 +1,34 @@ +view->make('settings::admin.prefix.create-edit', $this->editAction->run($request)); + } +} diff --git a/app/Modules/Settings/UI/Web/Handlers/Admin/Prefix/OverviewHandler.php b/app/Modules/Settings/UI/Web/Handlers/Admin/Prefix/OverviewHandler.php new file mode 100644 index 0000000..a893ce4 --- /dev/null +++ b/app/Modules/Settings/UI/Web/Handlers/Admin/Prefix/OverviewHandler.php @@ -0,0 +1,32 @@ +view->make('settings::admin.prefix.index', $this->overviewAction->run()); + } +} diff --git a/app/Modules/Settings/UI/Web/Handlers/Admin/Prefix/StoreHandler.php b/app/Modules/Settings/UI/Web/Handlers/Admin/Prefix/StoreHandler.php new file mode 100644 index 0000000..c0e1600 --- /dev/null +++ b/app/Modules/Settings/UI/Web/Handlers/Admin/Prefix/StoreHandler.php @@ -0,0 +1,32 @@ +storeAction->run($request) ? $request->success() : $request->failed(); + } +} diff --git a/app/Modules/Settings/UI/Web/Handlers/Admin/Prefix/UpdateHandler.php b/app/Modules/Settings/UI/Web/Handlers/Admin/Prefix/UpdateHandler.php new file mode 100644 index 0000000..5589a8b --- /dev/null +++ b/app/Modules/Settings/UI/Web/Handlers/Admin/Prefix/UpdateHandler.php @@ -0,0 +1,32 @@ +updateAction->run($request) ? $request->success() : $request->failed(); + } +} diff --git a/app/Modules/Settings/UI/Web/Requests/Prefix/Destroy.php b/app/Modules/Settings/UI/Web/Requests/Prefix/Destroy.php new file mode 100644 index 0000000..828fddf --- /dev/null +++ b/app/Modules/Settings/UI/Web/Requests/Prefix/Destroy.php @@ -0,0 +1,63 @@ + 'required|uuid|exists:settings_prefixes,uuid', + ]; + } + + /** + * @return array + */ + public function messages(): array + { + return [ + 'uuid.required' => 'Es wurde keine UUID übergeben.', + 'uuid.uuid' => 'Die übergebene UUID ist ungültig.', + 'uuid.exists' => 'Der zu bearbeitende Präfix existiert nicht.', + ]; + } + + /** + * @return RedirectResponse + */ + public function success(): RedirectResponse + { + return redirect()->route('admin.settings.prefix')->with([ + 'success' => 'Der Präfix wurde erfolgreich gelöscht.' + ]); + } + + /** + * @return RedirectResponse + */ + public function failed(): RedirectResponse + { + return redirect()->route('admin.settings.prefix')->with([ + 'error' => 'Der Präfix konnte aufgrund einer technischen Störung nicht gelöscht werden.' + ]); + } +} diff --git a/app/Modules/Settings/UI/Web/Requests/Prefix/Edit.php b/app/Modules/Settings/UI/Web/Requests/Prefix/Edit.php new file mode 100644 index 0000000..dc594bb --- /dev/null +++ b/app/Modules/Settings/UI/Web/Requests/Prefix/Edit.php @@ -0,0 +1,54 @@ + 'required|uuid|exists:settings_prefixes,uuid' + ]; + } + + /** + * @return array + */ + public function messages(): array + { + return [ + 'uuid.required' => 'Es wurde keine UUID übergeben.', + 'uuid.uuid' => 'Die übergebene UUID ist ungültig.', + 'uuid.exists' => 'Der zu bearbeitende Präfix existiert nicht.' + ]; + } + + /** + * @param null $keys + * @return array + */ + public function all($keys = null): array + { + $data = parent::all($keys); + $data['uuid'] = $this->route('uuid'); + + return $data; + } +} diff --git a/app/Modules/Settings/UI/Web/Requests/Prefix/Store.php b/app/Modules/Settings/UI/Web/Requests/Prefix/Store.php new file mode 100644 index 0000000..ab6fe85 --- /dev/null +++ b/app/Modules/Settings/UI/Web/Requests/Prefix/Store.php @@ -0,0 +1,66 @@ + 'required|unique:settings_prefixes,prefix', + 'display_style' => 'required', + 'forums' => 'required' + ]; + } + + /** + * @return array + */ + public function messages(): array + { + return [ + 'prefix.required' => 'Bitte geben Sie einen Präfix an!', + 'prefix.unique' => 'Dieser Präfix ist bereits vorhanden.', + 'display_style.required' => 'Bitte geben Sie einen Anzeigestil an!', + 'forums.required' => 'Bitte geben Sie Foren an, in denen der Präfix verfügbar sein soll.' + ]; + } + + /** + * @return RedirectResponse + */ + public function success(): RedirectResponse + { + return redirect()->route('admin.settings.prefix')->with([ + 'success' => 'Der Präfix wurde erfolgreich erstellt.' + ]); + } + + /** + * @return RedirectResponse + */ + public function failed(): RedirectResponse + { + return redirect()->route('admin.settings-prefix.create')->with([ + 'error' => 'Der Präfix konnte aufgrund einer technischen Störung nicht erstellt werden.' + ])->withInput(); + } +} diff --git a/app/Modules/Settings/UI/Web/Requests/Prefix/Update.php b/app/Modules/Settings/UI/Web/Requests/Prefix/Update.php new file mode 100644 index 0000000..5aec61a --- /dev/null +++ b/app/Modules/Settings/UI/Web/Requests/Prefix/Update.php @@ -0,0 +1,69 @@ + 'required|uuid|exists:settings_prefixes,uuid', + 'prefix' => 'required', + 'display_style' => 'required', + 'forums' => 'required' + ]; + } + + /** + * @return array + */ + public function messages(): array + { + return [ + 'uuid.required' => 'Es wurde keine UUID übergeben.', + 'uuid.uuid' => 'Die übergebene UUID ist ungültig.', + 'uuid.exists' => 'Der zu bearbeitende Präfix existiert nicht.', + 'prefix.required' => 'Bitte geben Sie einen Präfix an!', + 'display_style.required' => 'Bitte geben Sie einen Anzeigestil an!', + 'forums.required' => 'Bitte geben Sie Foren an, in denen der Präfix verfügbar sein soll.' + ]; + } + + /** + * @return RedirectResponse + */ + public function success(): RedirectResponse + { + return redirect()->route('admin.settings.prefix.edit', [$this->post('uuid')])->with([ + 'success' => 'Der Präfix wurde erfolgreich bearbeitet.' + ]); + } + + /** + * @return RedirectResponse + */ + public function failed(): RedirectResponse + { + return redirect()->route('admin.settings.prefix.edit', [$this->post('uuid')])->with([ + 'error' => 'Der Präfix konnte aufgrund einer technischen Störung nicht bearbeitet werden.' + ])->withInput(); + } +} diff --git a/app/Modules/Settings/UI/Web/Views/admin/index.blade.php b/app/Modules/Settings/UI/Web/Views/admin/index.blade.php new file mode 100644 index 0000000..77383a7 --- /dev/null +++ b/app/Modules/Settings/UI/Web/Views/admin/index.blade.php @@ -0,0 +1,7 @@ +@extends('admin::Layouts.master') +@section('content') +
+ @include('partials.messages') + @include('partials.admin.settings-tabs', ['subactive' => 'settings']) +
+@stop diff --git a/app/Modules/Settings/UI/Web/Views/admin/prefix/create-edit.blade.php b/app/Modules/Settings/UI/Web/Views/admin/prefix/create-edit.blade.php new file mode 100644 index 0000000..f97b7a7 --- /dev/null +++ b/app/Modules/Settings/UI/Web/Views/admin/prefix/create-edit.blade.php @@ -0,0 +1,42 @@ +@extends('admin::Layouts.master') +@section('pagecss') + +@stop +@section('content') +
+ @include('partials.messages') + @include('partials.admin.settings-tabs', ['subactive' => 'prefix']) +
+ @csrf + +
+
+ + +
+
+ + +
+
+ + +
+
+ @include('partials.button', ['context' => 'primary', 'type' => 'submit', 'icon' => 'save', 'label' => 'Speichern']) +
+
+
+
+@stop +@section('pagejs') + +@stop diff --git a/app/Modules/Settings/UI/Web/Views/admin/prefix/index.blade.php b/app/Modules/Settings/UI/Web/Views/admin/prefix/index.blade.php new file mode 100644 index 0000000..d32d78e --- /dev/null +++ b/app/Modules/Settings/UI/Web/Views/admin/prefix/index.blade.php @@ -0,0 +1,43 @@ +@extends('admin::Layouts.master') +@section('content') +
+ @include('partials.messages') + @include('partials.admin.settings-tabs', ['subactive' => 'prefix']) +
+
Präfix
+
Anzeigestil
+
Anz. Themen
+
+ @forelse($prefixes as $prefix) +
+ +
+ {!! $prefix->display_style !!} +
+
+ {{ $prefix->threads_count }} +
+
+
+ @csrf + + +
+
+
+ @empty +
+
+ Es sind keine Präfixe in der Datenbank vorhanden. +
+
+ @endforelse + @include('partials.button', ['context' => 'primary', 'href' => 'admin.settings.prefix.create', 'parameters' => [], 'icon' => 'plus', 'label' => 'Neuen Präfix erstellen']) +
+@stop diff --git a/app/Modules/Settings/UI/Web/routes.php b/app/Modules/Settings/UI/Web/routes.php new file mode 100644 index 0000000..75dce12 --- /dev/null +++ b/app/Modules/Settings/UI/Web/routes.php @@ -0,0 +1,30 @@ + 'Admin', + 'prefix' => 'admin/settings', + 'middleware' => [ + 'auth', + CheckAdmin::class + ] +], function() { + Route::get('/', OverviewHandler::class)->name('admin.settings'); + + Route::group([ + 'namespace' => 'Prefix', + 'prefix' => 'prefix', + 'middleware' => [ + 'auth', + CheckAdmin::class + ] + ], function() { + Route::get('/', OverviewHandler::class)->name('admin.settings.prefix'); + Route::get('create', CreateHandler::class)->name('admin.settings-prefix.create'); + Route::get('{uuid}', EditHandler::class)->name('admin.settings-prefix.edit'); + Route::post('store', StoreHandler::class)->name('admin.settings-prefix.store'); + Route::post('update', UpdateHandler::class)->name('admin.settings-prefix.update'); + Route::post('destroy', DestroyHandler::class)->name('admin.settings-prefix.destroy'); + }); +}); diff --git a/app/Modules/Settings/module.php b/app/Modules/Settings/module.php new file mode 100644 index 0000000..7b454f1 --- /dev/null +++ b/app/Modules/Settings/module.php @@ -0,0 +1,8 @@ + 'LaraBB\Settings\UI\Web\Handlers', + 'middleware' => [ + 'web', + ] +], __DIR__ . '/UI/Web/routes.php'); diff --git a/app/Modules/Thread/Actions/CreateAction.php b/app/Modules/Thread/Actions/CreateAction.php new file mode 100644 index 0000000..7d8d389 --- /dev/null +++ b/app/Modules/Thread/Actions/CreateAction.php @@ -0,0 +1,49 @@ +findGroupTask->all()->filter(function (Group $group) use ($request) { + return $request->user()->groups->max('priority') >= $group->priority; + }); + + $users = $this->findUserTask->all(['groups'])->filter(function (User $user) use ($groups) { + return !$user->isInGroup(['Guest']); + }); + + return [ + 'forum' => $request->forum, + 'groups' => $groups, + 'users' => $users + ]; + } +} diff --git a/app/Modules/Thread/Actions/ShowAction.php b/app/Modules/Thread/Actions/ShowAction.php new file mode 100644 index 0000000..7832b9b --- /dev/null +++ b/app/Modules/Thread/Actions/ShowAction.php @@ -0,0 +1,58 @@ +thread; + $this->updateThreadTask->run($thread, [ + 'views' => $thread->views + 1 + ]); + + $thread->postings = $thread->postings->filter(function(Post $post) use($request) { + if($post->groups->isEmpty()) { + return true; + } + + return $post->groups->min('priority') <= $request->user()->groups->max('priority'); + }); + + $thread->postings = $thread->postings->filter(function(Post $post) use($request) { + if($post->users->isEmpty()) { + return true; + } + + return $post->users->contains('uuid', $request->user()->uuid) || $post->created_uuid == $request->user()->uuid; + }); + + return [ + 'thread' => $thread, + 'posts' => $thread->postings, + 'forum' => $thread->forum, + 'category' => $thread->forum->category + ]; + } +} diff --git a/app/Modules/Thread/Actions/StoreAction.php b/app/Modules/Thread/Actions/StoreAction.php new file mode 100644 index 0000000..d1d71ca --- /dev/null +++ b/app/Modules/Thread/Actions/StoreAction.php @@ -0,0 +1,133 @@ +connection->transaction(function() use($request) { + $this->thread = $this->storeThreadTask->run($this->prepareThreadData($request)); + if(is_null($this->thread)) { + throw new Exception('The thread could not be created'); + } + + $post = $this->storePostTask->run($this->preparePostData($this->thread, $request)); + $this->updateThreadTask->run($this->thread, [ + 'slug' => $this->thread->slug . '-' . $this->thread->id, + 'lastpost_uuid' => $post->uuid, + 'firstpost_uuid' => $post->uuid + ]); + + $this->updateForumTask->run($request->forum, $this->prepareForumData($request->forum, $post)); + }); + } catch (Throwable $t) { + return false; + } + + return $this->thread; + } + + /** + * @param Store $request + * @return array + */ + private function prepareThreadData(Store $request): array + { + return [ + 'created_uuid' => $request->user()->uuid, + 'updated_uuid' => $request->user()->uuid, + 'forum_uuid' => $request->post('forum_uuid'), + 'prefix_uuid' => $request->post('prefix'), + 'title' => $request->post('title'), + 'slug' => Str::slug($request->post('title')), + 'users' => $this->preparePivotData($request, 'users'), + 'groups' => $this->preparePivotData($request, 'groups'), + ]; + } + + /** + * @param Thread $thread + * @param Store $request + * @return array + */ + private function preparePostData(Thread $thread, Store $request): array + { + return [ + 'created_uuid' => $request->user()->uuid, + 'updated_uuid' => $request->user()->uuid, + 'thread_uuid' => $thread->uuid, + 'title' => $request->post('title'), + 'content' => $request->post('content'), + 'users' => $this->preparePivotData($request, 'users'), + 'groups' => $this->preparePivotData($request, 'groups'), + ]; + } + + /** + * @param Forum $forum + * @param Post $post + * @return array + */ + private function prepareForumData(Forum $forum, Post $post): array + { + return [ + 'thread_count' => $forum->thread_count + 1, + 'posting_count' => $forum->posting_count + 1, + 'lastpost_uuid' => $post->uuid + ]; + } +} diff --git a/app/Modules/Thread/Data/Migrations/2020_11_13_115518_create_threads_table.php b/app/Modules/Thread/Data/Migrations/2020_11_13_115518_create_threads_table.php new file mode 100644 index 0000000..bec0999 --- /dev/null +++ b/app/Modules/Thread/Data/Migrations/2020_11_13_115518_create_threads_table.php @@ -0,0 +1,40 @@ +id(); + $table->uuid('uuid')->index('uuid'); + $table->dateTime('created_at'); + $table->uuid('created_uuid')->index('created_uuid'); + $table->dateTime('updated_at'); + $table->uuid('updated_uuid')->index('updated_uuid'); + $table->uuid('forum_uuid')->index('forum_uuid'); + $table->string('title', 255); + $table->string('slug', 255)->index('slug'); + $table->integer('views')->default(0); + $table->integer('posts')->default(1); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('threads'); + } +} diff --git a/app/Modules/Thread/Data/Migrations/2020_11_19_152028_create_threads_has_users_table.php b/app/Modules/Thread/Data/Migrations/2020_11_19_152028_create_threads_has_users_table.php new file mode 100644 index 0000000..59e4c16 --- /dev/null +++ b/app/Modules/Thread/Data/Migrations/2020_11_19_152028_create_threads_has_users_table.php @@ -0,0 +1,37 @@ +id(); + $table->uuid('uuid')->index('uuid'); + $table->dateTime('created_at'); + $table->uuid('created_uuid')->index('created_uuid'); + $table->dateTime('updated_at'); + $table->uuid('updated_uuid')->index('updated_uuid'); + $table->uuid('thread_uuid')->index('thread_uuid'); + $table->uuid('user_uuid')->index('user_uuid'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('threads_has_users'); + } +} diff --git a/app/Modules/Thread/Data/Migrations/2020_11_19_152035_create_threads_has_groups_table.php b/app/Modules/Thread/Data/Migrations/2020_11_19_152035_create_threads_has_groups_table.php new file mode 100644 index 0000000..f9eac00 --- /dev/null +++ b/app/Modules/Thread/Data/Migrations/2020_11_19_152035_create_threads_has_groups_table.php @@ -0,0 +1,37 @@ +id(); + $table->uuid('uuid')->index('uuid'); + $table->dateTime('created_at'); + $table->uuid('created_uuid')->index('created_uuid'); + $table->dateTime('updated_at'); + $table->uuid('updated_uuid')->index('updated_uuid'); + $table->uuid('thread_uuid')->index('thread_uuid'); + $table->uuid('group_uuid')->index('group_uuid'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('threads_has_groups'); + } +} diff --git a/app/Modules/Thread/Data/Migrations/2020_11_25_135736_add_lastpost_to_thread_table.php b/app/Modules/Thread/Data/Migrations/2020_11_25_135736_add_lastpost_to_thread_table.php new file mode 100644 index 0000000..6f44eb1 --- /dev/null +++ b/app/Modules/Thread/Data/Migrations/2020_11_25_135736_add_lastpost_to_thread_table.php @@ -0,0 +1,32 @@ +uuid('lastpost_uuid')->after('updated_uuid')->index('lastpost_uuid')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('threads', function (Blueprint $table) { + $table->dropColumn('lastpost_uuid'); + }); + } +} diff --git a/app/Modules/Thread/Data/Migrations/2021_07_01_124841_add_firstpost_to_thread_table.php b/app/Modules/Thread/Data/Migrations/2021_07_01_124841_add_firstpost_to_thread_table.php new file mode 100644 index 0000000..99c57ee --- /dev/null +++ b/app/Modules/Thread/Data/Migrations/2021_07_01_124841_add_firstpost_to_thread_table.php @@ -0,0 +1,32 @@ +uuid('firstpost_uuid')->after('lastpost_uuid')->index('firstpost_uuid')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('threads', function (Blueprint $table) { + $table->dropColumn('firstpost_uuid'); + }); + } +} diff --git a/app/Modules/Thread/Data/Migrations/2021_07_03_004535_add_prefix_uuid_to_threads_table.php b/app/Modules/Thread/Data/Migrations/2021_07_03_004535_add_prefix_uuid_to_threads_table.php new file mode 100644 index 0000000..9af33bb --- /dev/null +++ b/app/Modules/Thread/Data/Migrations/2021_07_03_004535_add_prefix_uuid_to_threads_table.php @@ -0,0 +1,32 @@ +uuid('prefix_uuid')->after('forum_uuid')->index('prefix_uuid'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('threads', function (Blueprint $table) { + $table->dropColumn('prefix_uuid'); + }); + } +} diff --git a/app/Modules/Thread/Models/Thread.php b/app/Modules/Thread/Models/Thread.php new file mode 100644 index 0000000..e8b8f9f --- /dev/null +++ b/app/Modules/Thread/Models/Thread.php @@ -0,0 +1,102 @@ +belongsTo(Forum::class, 'forum_uuid', 'uuid'); + } + + /** + * @return BelongsToMany + */ + public function groups(): BelongsToMany + { + return $this->belongsToMany(Group::class, 'threads_has_groups', 'thread_uuid', 'group_uuid'); + } + + /** + * @return BelongsToMany + */ + public function users(): BelongsToMany + { + return $this->belongsTomany(User::class, 'threads_has_users', 'thread_uuid', 'user_uuid'); + } + + /** + * @return HasMany + */ + public function postings(): HasMany + { + return $this->hasMany(Post::class, 'thread_uuid', 'uuid'); + } + + /** + * @return BelongsTo + */ + public function lastpost(): BelongsTo + { + return $this->belongsTo(Post::class, 'lastpost_uuid', 'uuid'); + } + + /** + * @return HasOne + */ + public function prefix(): HasOne + { + return $this->hasOne(Prefix::class, 'uuid', 'prefix_uuid'); + } +} diff --git a/app/Modules/Thread/ServiceProvider.php b/app/Modules/Thread/ServiceProvider.php new file mode 100644 index 0000000..798f9cf --- /dev/null +++ b/app/Modules/Thread/ServiceProvider.php @@ -0,0 +1,21 @@ +users()->detach(); + $thread->groups()->detach(); + + $thread->load('postings'); + + /** @var Post $posting */ + foreach($thread->postings as $posting) { + $posting->users()->detach(); + $posting->groups()->detach(); + } + + $thread->postings()->delete(); + + return $thread->delete(); + } +} diff --git a/app/Modules/Thread/Tasks/FindTask.php b/app/Modules/Thread/Tasks/FindTask.php new file mode 100644 index 0000000..43b1cb9 --- /dev/null +++ b/app/Modules/Thread/Tasks/FindTask.php @@ -0,0 +1,79 @@ +query)) { + $this->query = $this->thread->query(); + } + + /** @var Collection $data */ + $data = $this->query->with($with)->get(); + + if(is_null($data)) { + return null; + } + + return $this->return == 'Model' ? $data->first() : $data; + } + + /** + * @param $uuid + * @param array $with + * @return Collection|Thread|null + */ + public function byUuid($uuid, array $with = []): Collection|Thread|null + { + $this->return = 'Model'; + $this->query = $this->thread->query()->where('uuid', $uuid); + + return $this->run($with); + } + + /** + * @param $slug + * @param array $with + * @return Collection|Thread|null + */ + public function bySlug($slug, array $with = []): Collection|Thread|null + { + $this->return = 'Model'; + $this->query = $this->thread->query()->where('slug', $slug); + + return $this->run($with); + } +} diff --git a/app/Modules/Thread/Tasks/StoreTask.php b/app/Modules/Thread/Tasks/StoreTask.php new file mode 100644 index 0000000..d796f37 --- /dev/null +++ b/app/Modules/Thread/Tasks/StoreTask.php @@ -0,0 +1,46 @@ +thread->created_uuid = $data['created_uuid']; + $this->thread->updated_uuid = $data['updated_uuid']; + $this->thread->forum_uuid = $data['forum_uuid']; + $this->thread->prefix_uuid = $data['prefix_uuid']; + $this->thread->title = $data['title']; + $this->thread->slug = $data['slug']; + $this->thread->views = 0; + $this->thread->posts = 1; + + if ($this->thread->save()) { + $this->thread->users()->sync($data['users']); + $this->thread->groups()->sync($data['groups']); + + return $this->thread; + } + + return false; + } +} diff --git a/app/Modules/Thread/Tasks/UpdateTask.php b/app/Modules/Thread/Tasks/UpdateTask.php new file mode 100644 index 0000000..b4d8479 --- /dev/null +++ b/app/Modules/Thread/Tasks/UpdateTask.php @@ -0,0 +1,35 @@ +forum_uuid = $data['forum_uuid'] ?? $thread->forum_uuid; + $thread->prefix_uuid = $data['prefix_uuid'] ?? $thread->prefix_uuid; + $thread->updated_uuid = $data['updated_uuid'] ?? $thread->updated_uuid; + $thread->lastpost_uuid = $data['lastpost_uuid'] ?? $thread->lastpost_uuid; + $thread->firstpost_uuid = $data['firstpost_uuid'] ?? $thread->firstpost_uuid; + $thread->title = $data['title'] ?? $thread->title; + $thread->slug = $data['slug'] ?? $thread->slug; + $thread->views = $data['views'] ?? $thread->views; + $thread->posts = $data['posts'] ?? $thread->posts; + + $thread->users()->sync($data['users'] ?? []); + $thread->groups()->sync($data['groups'] ?? []); + + return $thread->save(); + } +} diff --git a/app/Modules/Thread/UI/Web/Handlers/CreateHandler.php b/app/Modules/Thread/UI/Web/Handlers/CreateHandler.php new file mode 100644 index 0000000..03e963f --- /dev/null +++ b/app/Modules/Thread/UI/Web/Handlers/CreateHandler.php @@ -0,0 +1,43 @@ +createAction->run($request); + + return $this->view->make('thread::create-edit', [ + 'forum' => $data['forum'], + 'groups' => $data['groups'], + 'users' => $data['users'] + ]); + } +} diff --git a/app/Modules/Thread/UI/Web/Handlers/ShowHandler.php b/app/Modules/Thread/UI/Web/Handlers/ShowHandler.php new file mode 100644 index 0000000..6e2aae9 --- /dev/null +++ b/app/Modules/Thread/UI/Web/Handlers/ShowHandler.php @@ -0,0 +1,35 @@ +view->make('thread::show', $this->showAction->run($request)); + } +} diff --git a/app/Modules/Thread/UI/Web/Handlers/StoreHandler.php b/app/Modules/Thread/UI/Web/Handlers/StoreHandler.php new file mode 100644 index 0000000..fe74841 --- /dev/null +++ b/app/Modules/Thread/UI/Web/Handlers/StoreHandler.php @@ -0,0 +1,39 @@ +storeAction->run($request); + + return $thread instanceof Thread ? $request->success($thread) : $request->failed(); + } +} diff --git a/app/Modules/Thread/UI/Web/Requests/Create.php b/app/Modules/Thread/UI/Web/Requests/Create.php new file mode 100644 index 0000000..33fbeb1 --- /dev/null +++ b/app/Modules/Thread/UI/Web/Requests/Create.php @@ -0,0 +1,82 @@ +forum = $getForumTask->bySlug($this->route('slug'), ['prefixes']); + if(is_null($this->forum)) { + abort(404, __('The desired forum does not exist.')); + } + + if(!$this->user()->forumPermissions[$this->forum->uuid]->create_threads) { + abort(403, __('You are not authorized to create postings in this forum.')); + } + + return true; + } + + /** + * @return string[] + */ + public function rules(): array + { + return [ + 'slug' => 'required|exists:forums,slug' + ]; + } + + /** + * @return array + */ + public function messages(): array + { + return [ + 'slug.required' => __('Please specify a forum.'), + 'slug.exists' => __('The desired forum does not exist.') + ]; + } + + /** + * @param null $keys + * @return array + */ + public function all($keys = null) + { + $data = parent::all($keys); + $data['slug'] = $this->route('slug'); + + return $data; + } + + /** + * @return RedirectResponse + */ + public function denied(): RedirectResponse + { + return redirect()->route('index')->with([ + 'error' => __('You are not authorized to create threads in this forum.') + ]); + } +} diff --git a/app/Modules/Thread/UI/Web/Requests/Show.php b/app/Modules/Thread/UI/Web/Requests/Show.php new file mode 100644 index 0000000..8add30d --- /dev/null +++ b/app/Modules/Thread/UI/Web/Requests/Show.php @@ -0,0 +1,73 @@ +thread = $getThreadTask->bySlug($this->route('slug'), [ + 'prefix', + 'users', + 'groups', + 'postings' => function($query) { + return $query->with(['users', 'groups', 'createdBy' => function($query) { + return $query->with(['profile', 'groups']); + }]); + }, + 'forum.category' + ]); + + if(is_null($this->thread)) { + abort(404, __('The desired thread does not exist.')); + } + + if(!$this->user()->forumPermissions[$this->thread->forum_uuid]->show_threads) { + abort(403, __('You are not authorized to view this thread.')); + } + + if (!$this->thread->groups->isEmpty() && $this->thread->groups->min('priority') >= $this->user()->groups->max('priority')) { + abort(403, __('You are not authorized to view this thread.')); + } + + if (!$this->thread->users->isEmpty() && is_null($this->thread->users->where('uuid', $this->user()->uuid)->first())) { + abort(403, __('You are not authorized to view this thread.')); + } + + return true; + } + + /** + * @return string[] + */ + public function rules(): array + { + return []; + } + + /** + * @return array + */ + public function messages(): array + { + return []; + } +} diff --git a/app/Modules/Thread/UI/Web/Requests/Store.php b/app/Modules/Thread/UI/Web/Requests/Store.php new file mode 100644 index 0000000..12f9f86 --- /dev/null +++ b/app/Modules/Thread/UI/Web/Requests/Store.php @@ -0,0 +1,87 @@ +forum = $getForumTask->byUuid($this->post('forum_uuid')); + if(is_null($this->forum)) { + abort(404, __('The desired forum does not exist.')); + } + + if(!$this->user()->forumPermissions[$this->forum->uuid]->create_threads) { + abort(403, __('You are not authorized to create threads in this forum.')); + } + + return true; + } + + /** + * @return string[] + */ + public function rules(): array + { + return [ + 'forum_uuid' => 'uuid', + 'title' => 'required|min:5', + 'content' => 'required|min:20' + ]; + } + + /** + * @return array + */ + public function messages(): array + { + return [ + 'forum_uuid.uuid' => __('The given UUID is invalid.'), + 'title.required' => __('Please enter a title!'), + 'title.min' => __('The title must be at least :min characters long.'), + 'content.required' => __('Please enter a content!'), + 'content.min' => __('The content must be at least :min characters long.') + ]; + } + + /** + * @return RedirectResponse + */ + public function failed(): RedirectResponse + { + return redirect()->route('thread-create', [$this->forum->slug])->with([ + 'error' => __('Your thread could not be created due to a technical problem.') + ]); + } + + /** + * @param Thread $thread + * @return RedirectResponse + */ + public function success(Thread $thread): RedirectResponse + { + return redirect()->route('thread', [$thread->slug])->with([ + 'success' => __('Your thread was successfully created.') + ]); + } +} diff --git a/app/Modules/Thread/UI/Web/Views/create-edit.blade.php b/app/Modules/Thread/UI/Web/Views/create-edit.blade.php new file mode 100644 index 0000000..c05613d --- /dev/null +++ b/app/Modules/Thread/UI/Web/Views/create-edit.blade.php @@ -0,0 +1,85 @@ +@php use LaraBB\Category\Models\Category;use LaraBB\Forum\Models\Forum;use LaraBB\Group\Models\Group;use LaraBB\User\Models\User; @endphp +@php + /** @var Category $category */ + /** @var Forum $forum */ + /** @var Group $group */ + /** @var User $user */ +@endphp +@extends('layouts.master') +@section('pagecss') + +@stop +@section('content') + + +
+ @csrf + +
+ @include('partials.messages') +
+
+ +
+
+ +
+
+
+ + +
+
+
+ +
+
+ +
+
+
+ + +
+@stop +@section('pagejs') + +@stop diff --git a/app/Modules/Thread/UI/Web/Views/show.blade.php b/app/Modules/Thread/UI/Web/Views/show.blade.php new file mode 100644 index 0000000..9c2164d --- /dev/null +++ b/app/Modules/Thread/UI/Web/Views/show.blade.php @@ -0,0 +1,95 @@ +@php + /** @var \LaraBB\Category\Models\Category $category */ + /** @var \LaraBB\Forum\Models\Forum $forum */ + /** @var \LaraBB\Thread\Models\Thread $thread */ + /** @var \LaraBB\Post\Models\Post $post */ + $threadStyle = config('larabb.thread-style'); +@endphp +@extends('layouts.master') +@section('content') +@include('partials.messages', ['autoHide' => 'auto-hide']) +
+ + {!! button('Create Posting')->permission($currentUser->forumPermissions[$forum->uuid]->getAttribute('create_posts')) + ->type('link') + ->href(route('reply', [$thread->slug])) + ->class('btn btn-purple text-uppercase') + ->icon('fas fa-fw fa-plus') + ->render() !!} +
+
+ @include('partials.breadcrumb', [ + 'items' => [ + ['href' => 'index', 'parameters' => null, 'label' => null, 'icon' => 'home'], + ['href' => 'category', 'parameters' => [$category->slug], 'label' => $category->title], + ['href' => 'forum', 'parameters' => [$forum->slug], 'label' => $forum->title, 'mobile' => true], + ['label' => $thread->prefix->display_style . ' ' . $thread->title, 'mobile' => true], + ] + ]) +
+ @foreach($posts as $post) +
last && $threadStyle != 'classic' ? ' style="border-bottom:3px solid #dadada;"' : '' !!}> +
+
+
+
+ +
+
+ {{ $post->createdBy->username }} + + {{ $post->created_at->format($currentUser->profile->dateformat . ' - ' . $currentUser->profile->timeformat) }} + +
+
+ + #{{ $post->id }} + +
+
+ @if($threadStyle != 'classic') +
+ @endif +
+
+ {!! $post->content !!} +
+
+ +
+ @endforeach +
+
+
+ + {!! button('Create Posting')->permission($currentUser->forumPermissions[$forum->uuid]->getAttribute('create_posts')) + ->type('link') + ->href(route('reply', [$thread->slug])) + ->class('btn btn-purple text-uppercase') + ->icon('fas fa-fw fa-plus') + ->render() !!} +
+@stop diff --git a/app/Modules/Thread/UI/Web/routes.php b/app/Modules/Thread/UI/Web/routes.php new file mode 100644 index 0000000..33d9e1c --- /dev/null +++ b/app/Modules/Thread/UI/Web/routes.php @@ -0,0 +1,23 @@ + [ + SetUser::class + ], + 'prefix' => 'forum' +], function() { + Route::get('{slug}/create-thread', CreateHandler::class)->name('thread-create'); +}); + +Route::group([ + 'middleware' => [ + SetUser::class + ], + 'prefix' => 'thread' +], function() { + Route::get('/{slug}', ShowHandler::class)->name('thread'); + Route::post('store', StoreHandler::class)->name('thread-store'); +}); + diff --git a/app/Modules/Thread/module.php b/app/Modules/Thread/module.php new file mode 100644 index 0000000..427e4f0 --- /dev/null +++ b/app/Modules/Thread/module.php @@ -0,0 +1,8 @@ + 'LaraBB\Thread\UI\Web\Handlers', + 'middleware' => [ + 'web', + ], +], __DIR__ . '/UI/Web/routes.php'); diff --git a/app/Modules/Torrent/Actions/DownloadAction.php b/app/Modules/Torrent/Actions/DownloadAction.php new file mode 100644 index 0000000..1efe7e5 --- /dev/null +++ b/app/Modules/Torrent/Actions/DownloadAction.php @@ -0,0 +1,44 @@ +findTorrentTask->byUuid($request->route('uuid')); + + if(Storage::fileExists($torrent->filename)) { + $torrentFile = TorrentFile::load(storage_path('app/' . $torrent->filename)); + $torrentFile->setAnnounce($torrentFile->getAnnounce() . '/' . $request->user()->pid); + + return [ + 'torrentFile' => $torrentFile, + 'filename' => $torrent->name + ]; + } + + return null; + } +} diff --git a/app/Modules/Torrent/Actions/StoreAction.php b/app/Modules/Torrent/Actions/StoreAction.php new file mode 100644 index 0000000..307a9b5 --- /dev/null +++ b/app/Modules/Torrent/Actions/StoreAction.php @@ -0,0 +1,65 @@ +connection->transaction(function() use($request) { + $this->torrent = $this->storeTorrentTask->run($this->prepareTorrentData($request)); + }); + } catch (Throwable $t) { + return false; + } + + return $this->torrent; + } + + /** + * @param $request + * @return array + */ + private function prepareTorrentData($request): array + { + $torrent = TorrentFile::load($request->file('torrent')); + + return [ + 'created_uuid' => $request->user()->uuid, + 'updated_uuid' => $request->user()->uuid, + 'infohash' => $torrent->getInfoHash(), + 'name' => $torrent->getName(), + 'filename' => $request->file('torrent')->store('torrents'), + 'size' => $torrent->getSize(), + ]; + } +} diff --git a/app/Modules/Torrent/Actions/UploadAction.php b/app/Modules/Torrent/Actions/UploadAction.php new file mode 100644 index 0000000..6e9a981 --- /dev/null +++ b/app/Modules/Torrent/Actions/UploadAction.php @@ -0,0 +1,31 @@ + $uuid + ]; + } +} diff --git a/app/Modules/Torrent/Data/Migrations/2023_03_19_024114_create_users_torrents_table.php b/app/Modules/Torrent/Data/Migrations/2023_03_19_024114_create_users_torrents_table.php new file mode 100644 index 0000000..f41bb05 --- /dev/null +++ b/app/Modules/Torrent/Data/Migrations/2023_03_19_024114_create_users_torrents_table.php @@ -0,0 +1,38 @@ +increments('id'); + $table->uuid('uuid')->unique('uuid'); + $table->datetime('created_at'); + $table->uuid('created_uuid')->index('created_uuid'); + $table->datetime('updated_at'); + $table->uuid('updated_uuid')->index('updated_uuid'); + $table->string('infohash')->index('infohash'); + $table->string('name', 500); + $table->string('filename', 500); + $table->bigInteger('size'); + $table->integer('seeder')->default(0); + $table->integer('leecher')->default(0); + $table->integer('finished')->default(0); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('users_torrents'); + } +}; diff --git a/app/Modules/Torrent/Models/Torrent.php b/app/Modules/Torrent/Models/Torrent.php new file mode 100644 index 0000000..3fb0e49 --- /dev/null +++ b/app/Modules/Torrent/Models/Torrent.php @@ -0,0 +1,38 @@ +torrent = $torrent; + } + + /** + * @param array $with + * @return Builder[]|Torrent|Collection|null + */ + public function run(array $with = []): Collection|array|Torrent|null + { + if (is_null($this->query)) { + $this->query = $this->torrent->query(); + } + + /** @var Collection $return */ + $data = $this->query->with($with)->get(); + + if(is_null($data)) { + return null; + } + + return $this->return == 'Model' ? $data->first() : $data; + } + + /** + * @param $uuid + * @param $with + * @return Collection|array|Torrent|null + */ + public function byUuid($uuid, $with = []): Collection|array|Torrent|null + { + $this->return = 'Model'; + $this->query = $this->torrent->query()->where('uuid', $uuid); + + return $this->run($with); + } + + /** + * @param $infoHash + * @param array $with + * @return array|Collection|Torrent|null + */ + public function byInfoHash($infoHash, array $with = []): Collection|array|Torrent|null + { + $this->return = 'Model'; + $this->query = $this->torrent->query()->where('infohash', $infoHash); + + return $this->run($with); + } +} diff --git a/app/Modules/Torrent/Tasks/StoreTask.php b/app/Modules/Torrent/Tasks/StoreTask.php new file mode 100644 index 0000000..e3bbf8f --- /dev/null +++ b/app/Modules/Torrent/Tasks/StoreTask.php @@ -0,0 +1,38 @@ +torrent->created_uuid = $data['created_uuid']; + $this->torrent->updated_uuid = $data['updated_uuid']; + $this->torrent->infohash = $data['infohash']; + $this->torrent->filename = $data['filename']; + $this->torrent->name = $data['name']; + $this->torrent->size = $data['size']; + + $this->torrent->save(); + + return $this->torrent; + } +} diff --git a/app/Modules/Torrent/Tasks/UpdateTask.php b/app/Modules/Torrent/Tasks/UpdateTask.php new file mode 100644 index 0000000..a9f2894 --- /dev/null +++ b/app/Modules/Torrent/Tasks/UpdateTask.php @@ -0,0 +1,22 @@ +leecher = $data['leecher'] ?? $torrent->leecher; + $torrent->seeder = $data['seeder'] ?? $torrent->seeder; + $torrent->finished = $data['finished'] ?? $torrent->finished; + + return $torrent->save(); + } +} diff --git a/app/Modules/Torrent/UI/Web/Handlers/DownloadHandler.php b/app/Modules/Torrent/UI/Web/Handlers/DownloadHandler.php new file mode 100644 index 0000000..1dc0281 --- /dev/null +++ b/app/Modules/Torrent/UI/Web/Handlers/DownloadHandler.php @@ -0,0 +1,26 @@ +downloadAction->run($request); + + if(!is_null($return)) { + return response($return['torrentFile']->dumpToString())->header('Content-Type', 'application/x-bittorrent') + ->header('Content-Disposition', 'attachment; filename="' . $return['filename'] . '.torrent"'); + } + } +} diff --git a/app/Modules/Torrent/UI/Web/Handlers/StoreHandler.php b/app/Modules/Torrent/UI/Web/Handlers/StoreHandler.php new file mode 100644 index 0000000..7e8265f --- /dev/null +++ b/app/Modules/Torrent/UI/Web/Handlers/StoreHandler.php @@ -0,0 +1,33 @@ +storeAction->run($request); + + return !$torrent ? $request->failed() : $request->success($torrent->uuid); + } +} diff --git a/app/Modules/Torrent/UI/Web/Handlers/UploadHandler.php b/app/Modules/Torrent/UI/Web/Handlers/UploadHandler.php new file mode 100644 index 0000000..bbb6131 --- /dev/null +++ b/app/Modules/Torrent/UI/Web/Handlers/UploadHandler.php @@ -0,0 +1,35 @@ +view->make('torrent::upload', $this->uploadAction->run($request, $uuid)); + } +} diff --git a/app/Modules/Torrent/UI/Web/Requests/DownloadRequest.php b/app/Modules/Torrent/UI/Web/Requests/DownloadRequest.php new file mode 100644 index 0000000..4af33e0 --- /dev/null +++ b/app/Modules/Torrent/UI/Web/Requests/DownloadRequest.php @@ -0,0 +1,52 @@ +user()->isInGroup(['Member']); + } + + /** + * @return string[] + */ + public function rules(): array + { + return [ + 'uuid' => 'required|exists:users_torrents,uuid' + ]; + } + + /** + * @return array + */ + public function messages(): array + { + return [ + 'uuid.required' => trans('Please provide the UUID of the torrent you want to download.'), + 'uuid.exists' => trans('The torrent file you want to download doesn\'t exists.') + ]; + } + + /** + * @param $keys + * @return array + */ + public function all($keys = null): array + { + $data = parent::all($keys); + $data['uuid'] = $this->route('uuid'); + + return $data; + } +} diff --git a/app/Modules/Torrent/UI/Web/Requests/StoreRequest.php b/app/Modules/Torrent/UI/Web/Requests/StoreRequest.php new file mode 100644 index 0000000..277ecc6 --- /dev/null +++ b/app/Modules/Torrent/UI/Web/Requests/StoreRequest.php @@ -0,0 +1,110 @@ +user()->isInGroup(['Member']); + } + + /** + * @return string[] + */ + public function rules(): array + { + return [ + 'torrent' => 'required|mimetypes:application/x-bittorrent', + 'announceurl' => 'accepted', + 'infohash' => 'accepted' + ]; + } + + /** + * @return array + */ + public function messages(): array + { + return [ + 'torrent.required' => trans('Please select a torrent file.'), + 'torrent.mimetypes' => trans('The file you tired to upload is not a torrent file.'), + 'announceurl.accepted' => trans('Your torrent has an invalid announce URL. Please use the one specified in this form.'), + 'infohash.accepted' => trans('This torrent already exists in our database.') + ]; + } + + /** + * @param $keys + * @return array + * @throws BindingResolutionException + */ + public function all($keys = null): array + { + return array_merge(parent::all($keys), array_merge( + $this->validateTorrent() + )); + } + + /** + * @param $uuid + * @return RedirectResponse + */ + public function success($uuid): RedirectResponse + { + return redirect()->route('torrent.upload', [$uuid])->with([ + 'success' => 'Your torrent was successfully uploaded. Please redownload it from here in order to start seeding.' + ]); + } + + /** + * @return RedirectResponse + */ + public function failed(): RedirectResponse + { + return redirect()->route('torrent.upload')->withInput()->with([ + 'error' => trans('Your torrent could not be uploaded due to technical issues.') + ]); + } + + /** + * @return array|true[] + * @throws BindingResolutionException + */ + private function validateTorrent(): array + { + $torrentFile = TorrentFile::load($this->file('torrent')); + if(config('tracker.announce') != $torrentFile->getAnnounce()) { + return [ + 'announceurl' => false, + 'infohash' => true, + ]; + } + + $torrentFindTask = app()->make(FindTask::class); + $torrent = $torrentFindTask->byInfoHash($torrentFile->getInfoHash()); + if(!is_null($torrent)) { + return [ + 'announceurl' => true, + 'infohash' => false, + ]; + } + + return [ + 'announceurl' => true, + 'infohash' => true, + ]; + } +} diff --git a/app/Modules/Torrent/UI/Web/Requests/UploadRequest.php b/app/Modules/Torrent/UI/Web/Requests/UploadRequest.php new file mode 100644 index 0000000..fc07a94 --- /dev/null +++ b/app/Modules/Torrent/UI/Web/Requests/UploadRequest.php @@ -0,0 +1,23 @@ +user()->isInGroup(['Member']); + } + + public function rules() + { + return []; + } + + public function messages() + { + return []; + } +} diff --git a/app/Modules/Torrent/UI/Web/Views/upload.blade.php b/app/Modules/Torrent/UI/Web/Views/upload.blade.php new file mode 100644 index 0000000..68ea448 --- /dev/null +++ b/app/Modules/Torrent/UI/Web/Views/upload.blade.php @@ -0,0 +1,35 @@ +@extends('layouts.master') +@section('content') + + +
+ @include('partials.messages') +
+ @csrf + + {!! button('Upload')->class('btn btn-purple')!!} + +
+ @if(!empty($uuid)) +
+ {!! button('Redownload torrent for seeding')->type('link') + ->href(route('torrent.download', [$uuid])) + ->icon('fas fa-download') + ->class('btn btn-success btn-lg') !!} +
+ @endif + +
+
+@stop diff --git a/app/Modules/Torrent/UI/Web/routes.php b/app/Modules/Torrent/UI/Web/routes.php new file mode 100644 index 0000000..a00f429 --- /dev/null +++ b/app/Modules/Torrent/UI/Web/routes.php @@ -0,0 +1,13 @@ + 'torrent' +], function() { + Route::get('/{uuid?}', UploadHandler::class)->name('torrent.upload'); + Route::post('/', StoreHandler::class)->name('torrent.store'); + Route::get('download/{uuid}', DownloadHandler::class)->name('torrent.download'); +}); diff --git a/app/Modules/Torrent/module.php b/app/Modules/Torrent/module.php new file mode 100644 index 0000000..b114951 --- /dev/null +++ b/app/Modules/Torrent/module.php @@ -0,0 +1,7 @@ + [ + 'web', + ], +], __DIR__ . '/UI/Web/routes.php'); diff --git a/app/Modules/Tracker/Actions/AnnounceAction.php b/app/Modules/Tracker/Actions/AnnounceAction.php new file mode 100644 index 0000000..f17167f --- /dev/null +++ b/app/Modules/Tracker/Actions/AnnounceAction.php @@ -0,0 +1,345 @@ +clientRequest = $this->setCurrentRequest($request); + $this->request = $request; + + if (!$this->isTorrentClient()) { + return false; + } + + $this->isFirewalled(); + + $this->user = $this->findUserTask->byPid($this->clientRequest->pid, ['profile']); + $this->torrent = $this->findTorrentTask->byInfoHash($this->clientRequest->infoHash); + $this->peer = $this->findPeerTask->byPeerIdAndTorrentUuid($this->clientRequest->peerId, $this->torrent->uuid); + if (is_null($this->peer)) { + $this->peer = $this->storePeerTask->run($this->preparePeerData()); + } + + + switch ($this->clientRequest->event) { + case 'started': + $this->started(); + break; + case 'stopped': + $this->stopped(); + break; + case 'finished': + $this->finished(); + break; + case empty($this->currentRequest->event): + $this->noEvent(); + break; + } + + return Bencode::encode([ + 'interval' => config('tracker.max_announce'), + 'min interval' => config('tracker.max_announce'), + 'complete' => $this->torrent->seeder, + 'incomplete' => $this->torrent->leecher, + 'peers' => (function($peerReturn) { + if($this->clientRequest->compact) { + return $peerReturn; + } + + $peers = []; + $peerReturn->map(function(Peer $peer) use(&$peers) { + $peers[] = [ + 'peer id' => $peer->peer_id, + 'ip' => $peer->ip, + 'port' => $peer->port + ]; + }); + + return $peers; + })($this->sendRandomPeers()) + ]); + } + + /** + * @return bool + */ + private function isTorrentClient(): bool + { + return !preg_match('/' . $this->browsers . '/', $this->clientRequest->agent); + } + + /** + * + */ + public function isFirewalled(): void + { + $theError = ''; + $fd = @fsockopen($this->clientRequest->ip, $this->clientRequest->port, $errno, $theError, 10); + + $this->clientRequest->nat = !$fd; + if($fd) fclose($fd); + } + + /** + * @return void + */ + private function started(): void + { + $this->updatePeerTask->run($this->peer, $this->preparePeerData('started')); + $this->updateTorrentTask->run($this->torrent, $this->prepareTorrentData('started')); + $this->updateProfileTask->run($this->user->profile, $this->prepareProfileData()); + } + + /** + * @return void + * @throws Exception + */ + private function stopped(): void + { + $this->destroyPeerTask->run($this->peer); + $this->updateTorrentTask->run($this->torrent, $this->prepareTorrentData('stopped')); + $this->updateProfileTask->run($this->user->profile, $this->prepareProfileData()); + } + + + /** + * @return void + */ + private function finished(): void + { + $this->updatePeerTask->run($this->peer, $this->preparePeerData('finished')); + $this->updateTorrentTask->run($this->torrent, $this->prepareTorrentData('finished')); + $this->updateProfileTask->run($this->user->profile, $this->prepareProfileData()); + } + + + /** + * @return void + */ + private function noEvent(): void + { + if ($this->peer->bytes != 0 && $this->clientRequest->left == 0) { + $this->updatePeerTask->run($this->peer, $this->preparePeerData('finished')); + $this->updateTorrentTask->run($this->torrent, $this->prepareTorrentData('finished')); + } + + $this->collectBytes(); + } + + /** + * @return void + */ + private function collectBytes(): void + { + $diff = bcsub($this->peer->bytes, $this->clientRequest->left); + + $this->updatePeerTask->run($this->peer, $this->preparePeerData('bytes', $diff)); + } + + + /** + * @return string|null|Collection + */ + private function sendRandomPeers(): Collection|string|null + { + $peerCollection = $this->findPeerTask->byTorrentUuid($this->torrent->uuid); + if (!is_null($peerCollection)) { + if($this->clientRequest->compact) { + $compactStr = ''; + $peerCollection->map(function (Peer $peer) use (&$compactStr) { + if($peer->created_uuid == $this->user->uuid) return; + + $compactStr .= str_pad(pack('Nn', ip2long($peer->ip), $peer->port), 6); + }); + + return $compactStr; + } + + return $peerCollection; + } + + return null; + } + + /** + * @param string $status + * @param float $diff + * @return array + */ + private function preparePeerData(string $status = '', float $diff = 0): array + { + $data = [ + 'created_uuid' => $this->user->uuid, + 'updated_uuid' => $this->user->uuid, + 'torrent_uuid' => $this->torrent->uuid, + 'peer_id' => $this->clientRequest->peerId, + 'ip' => $this->clientRequest->ip, + 'port' => $this->clientRequest->port, + 'status' => $this->clientRequest->left == 0 ? 1 : 2, + 'natuser' => $this->clientRequest->nat, + 'client' => $this->clientRequest->agent, + 'dns' => $this->clientRequest->dns, + 'downloaded' => $this->clientRequest->downloaded, + 'uploaded' => $this->clientRequest->uploaded, + ]; + + switch ($status) { + case 'started': + unset($data['peer_id'], $data['torrent_uuid'], $data['ip'], $data['port'], $data['natuser'], $data['client'], $data['dns']); + break; + case 'finished': + unset($data['peer_id'], $data['torrent_uuid'], $data['ip'], $data['port'], $data['natuser'], $data['client'], $data['dns'], $data['compact']); + + $data['bytes'] = 0; + $data['status'] = 'seeder'; + break; + case 'bytes': + unset($data['peer_id'], $data['torrent_uuid'], $data['ip'], $data['port'], $data['status'], $data['natuser'], $data['client'], $data['dns'], $data['compact']); + + $data['bytes'] = empty($diff) ? $this->peer->bytes : $this->clientRequest->left; + break; + } + + return $data; + } + + /** + * @param string $status + * @return array + */ + private function prepareTorrentData(string $status = ''): array + { + switch ($status) { + case 'started': + $this->clientRequest->left > 0 ? $this->torrent->leecher++ : $this->torrent->seeder++; + + return [ + 'leecher' => $this->torrent->leecher, + 'seeder' => $this->torrent->seeder, + 'finished' => $this->torrent->finished, + ]; + case 'finished': + return [ + 'leecher' => $this->torrent->leecher--, + 'seeder' => $this->torrent->seeder++, + 'finished' => $this->torrent->finished++, + ]; + case 'stopped': + $this->clientRequest->left > 0 ? $this->torrent->leecher-- : $this->torrent->seeder--; + + return [ + 'leecher' => $this->torrent->leecher, + 'seeder' => $this->torrent->seeder, + 'finished' => $this->torrent->finished, + ]; + } + + return []; + } + + /** + * @return array + */ + #[ArrayShape([ + 'uploaded' => "mixed", + 'downloaded' => "mixed", + 'ratio' => "float|int" + ])] + private function prepareProfileData(): array + { + $uploaded = $this->user->profile->uploaded + $this->clientRequest->uploaded; + $downloaded = $this->user->profile->downloaded + $this->clientRequest->downloaded; + + return [ + 'uploaded' => $uploaded, + 'downloaded' => $downloaded, + 'ratio' => $uploaded == 0 ? 0 : ($downloaded / $uploaded) + ]; + } +} diff --git a/app/Modules/Tracker/Actions/ScrapeAction.php b/app/Modules/Tracker/Actions/ScrapeAction.php new file mode 100644 index 0000000..6ff1320 --- /dev/null +++ b/app/Modules/Tracker/Actions/ScrapeAction.php @@ -0,0 +1,10 @@ +config = config('perfectpurple.tracker'); + $this->userProfile = $userProfile; + $this->torrentPeer = $torrentPeer; + $this->torrentFile = $torrentFile; + //$this->torrentHistory = $torrentHistory; + $this->request = new stdClass(); + } + + /** + * @return bool + */ + public function checkAccess(): bool + { + return !preg_match('/' . $this->browsers . '/', $this->request->agent); + } + + /** + * @return bool + */ + public function checkClientValues(): bool + { + return !empty($this->request->port); + } + + /** + * @return bool + */ + public function checkTorrent(): bool + { + if(empty($this->request->infoHash)) { + return false; + } + + $this->currentTorrent = $this->torrentFile->readByInfoHash($this->request->infoHash); + + return !is_null($this->currentTorrent); + } + + /** + * @return bool + */ + public function checkPid(): bool + { + $userProfile = $this->userProfile->readByPid($this->request->pid); + + return !is_null($userProfile); + } + + /** + * @return bool + */ + public function checkSamePid(): bool + { + $data = $this->torrentPeer->status($this->request->pid, $this->currentTorrent->id); + if(!$data->isEmpty()) { + foreach($data as $set) { + if($set->status == 'seeder' && $set->status_cnt >= $this->config['max_pid_seed']) return false; + if($set->status == 'leecher' && $set->status_cnt >= $this->config['max_pid_leech']) return false; + } + + return true; + } + + return true; + } + + /** + * @return $this + */ + public function checkFirewalled(): Announce + { + $theError = ''; + $fd = fsockopen($this->request->ip, $this->request->port, $errno, $theError, 10); + + $this->request->nat = !$fd; + fclose($fd); + + return $this; + } + + /** + * @return bool|string + */ + public function checkClientEvent(): bool|string + { + $this->currentPeer = $this->torrentPeer->read($this->request->pid, $this->currentTorrent->uuid, ['profile']); + + return match ($this->request->event) { + 'started' => $this->torrentStarted(), + 'stopped' => $this->torrentStopped(), + 'finished' => $this->torrentFinished(), + empty($this->currentRequest->event) => $this->torrentNoEvent(), + default => false, + }; + + } + + /** + * @return string + */ + private function torrentStarted(): string + { + if(!is_null($this->currentPeer)) { + $this->torrentPeer->edit($this->currentPeer, $this->request); + } else { + $this->torrentPeer->add($this->request, $this->currentTorrent); + $this->currentPeer = $this->torrentPeer; + } + + /*$history = $this->torrentHistory->read($this->currentPeer->user->uid, $this->currentTorrent->id); + if(!is_null($history)) { + $this->torrentHistory->edit($history, $this->currentRequest, true); + } elseif(is_null($history) && $this->currentRequest->left > 0) { + $this->torrentHistory->add($this->currentPeer, $this->currentTorrent, $this->currentRequest, true); + }*/ + + $this->torrentFile->setSeedersLeechers($this->currentTorrent, $this->request); + return $this->getRandomPeers(); + } + + /** + * @return string + */ + private function torrentStopped(): string + { + $this->torrentPeer->kill($this->currentPeer, $this->currentTorrent); + $this->userProfile->setTraffic($this->currentPeer->profile, $this->request); + + /*$history = $this->torrentHistory->read($this->currentPeer->user->uid, $this->currentTorrent->id); + if(!is_null($history)) { + $this->torrentHistory->edit($history, $this->currentRequest, false); + }*/ + + return $this->getRandomPeers(); + } + + /** + * @return string + */ + private function torrentFinished(): string + { + if(is_null($this->currentPeer)) { + $this->torrentPeer->add($this->request, $this->currentTorrent); + $this->currentPeer = $this->torrentPeer; + } + + $this->torrentPeer->complete($this->currentPeer, $this->request); + $this->torrentFile->complete($this->currentTorrent); + + /*$history = $this->torrentHistory->read($this->currentPeer->user->uid, $this->currentTorrent->id); + if(!is_null($history)) { + $this->torrentHistory->edit($history, $this->currentRequest, true, true); + } else { + $this->torrentHistory->add($this->currentPeer, $this->currentTorrent, $this->currentRequest, true, true); + }*/ + + return $this->getRandomPeers(); + } + + /** + * @return string + */ + private function torrentNoEvent(): string + { + if(is_null($this->currentPeer)) { + $this->torrentPeer->add($this->request, $this->currentTorrent); + $this->currentPeer = $this->torrentPeer; + } + + if($this->currentPeer->bytes != 0 && $this->request->left == 0) { + $this->torrentPeer->complete($this->currentPeer, $this->request); + $this->torrentFile->complete($this->currentTorrent); + } + + $this->collectBytes(); + + return $this->getRandomPeers(); + } + + /** + * @return void + */ + private function collectBytes(): void + { + $diff = bcsub($this->currentPeer->bytes, $this->currentPeer->left); + + $this->torrentPeer->setBytes($this->currentPeer, $this->request, $diff); + } + + /** + * @return string + */ + private function getRandomPeers(): string + { + $data = $this->torrentPeer->random($this->currentTorrent->uuid, $this->request->numWant); + if(!is_null($data) && $this->request->compact) { + $compactStr = ''; + $data->map(function($set) use(&$compactStr) { + $compactStr .= str_pad(pack('Nn', ip2long($set->ip), $set->port), 6); + }); + + return $compactStr; + } + + return $data; + } +} diff --git a/app/Modules/Tracker/Config/module.php b/app/Modules/Tracker/Config/module.php new file mode 100644 index 0000000..f2a4747 --- /dev/null +++ b/app/Modules/Tracker/Config/module.php @@ -0,0 +1,11 @@ + 'https://larabb.lando/announce', + 'min_announce' => 300, + 'max_announce' => 1800, + 'max_peers' => 50, + 'max_pid_seed' => 1, + 'max_pid_leech' => 1, + 'ipoverride' => false, + 'dht' => false, +]; diff --git a/app/Modules/Tracker/ServiceProvider.php b/app/Modules/Tracker/ServiceProvider.php new file mode 100644 index 0000000..dc8eebd --- /dev/null +++ b/app/Modules/Tracker/ServiceProvider.php @@ -0,0 +1,21 @@ +pid = $objRequest->route('pid'); + $request->peerId = bin2hex($objRequest->get('peer_id')); + $request->agent = $objRequest->server('HTTP_USER_AGENT'); + $request->ip = long2ip(ip2long($objRequest->ip())); + $request->ipOverride = $objRequest->get('ip', $objRequest->get('ipv6')); + $request->host = gethostbyaddr($request->ipOverride); + $request->infoHash = bin2hex($objRequest->get('info_hash')); + $request->port = intval($objRequest->get('port')); + $request->uploaded = floatval($objRequest->get('uploaded')); + $request->downloaded = floatval($objRequest->get('downloaded')); + $request->left = floatval($objRequest->get('left')); + $request->event = $objRequest->get('event'); + $request->numWant = $objRequest->get('numwant', 30); + $request->compact = $objRequest->has('compact'); + $request->ip = !empty($request->ipOverride) ? $request->ipOverride : $request->ip; + $request->host = $request->host == $request->ipOverride ? 'AA' : strtoupper($request->host); + $request->compactStr = str_pad(pack('Nn', ip2long($request->ip), $request->port), 6); + + preg_match('/^(.+)\.([A-Z]{2,3})$/', $request->host, $tldm); + $request->dns = isset($tldm[2]) && !empty($tldm[2]) ? $tldm[2] : 'AA'; + + return $request; + } +} diff --git a/app/Modules/Tracker/UI/Web/Handlers/AnnounceHandler.php b/app/Modules/Tracker/UI/Web/Handlers/AnnounceHandler.php new file mode 100644 index 0000000..d9fd648 --- /dev/null +++ b/app/Modules/Tracker/UI/Web/Handlers/AnnounceHandler.php @@ -0,0 +1,34 @@ +announceAction->run($request); + } +} diff --git a/app/Modules/Tracker/UI/Web/Requests/Announce.php b/app/Modules/Tracker/UI/Web/Requests/Announce.php new file mode 100644 index 0000000..f659a42 --- /dev/null +++ b/app/Modules/Tracker/UI/Web/Requests/Announce.php @@ -0,0 +1,56 @@ + 'required|exists:users,pid', + 'infohash' => 'required|exists:users_torrents,infohash', + 'port' => 'required' + ]; + } + + /** + * @return array|string[] + */ + public function messages(): array + { + return [ + 'pid.required' => Bencode::encode(['failure reason' => 'PID is missing. Please redownload the torrent.']), + 'pid.exists' => Bencode::encode(['failure reason' => 'There is no user with this PID.']), + 'infohash.required' => Bencode::encode(['failure reason' => 'Torrent info hash is missing. Please redownload the torrent.']), + 'infohash.exists' => Bencode::encode(['failure reason' => 'This torrent is not registered on our tracker.']), + 'port' => 'Parameter "port" is missing in request.' + ]; + } + + public function all($keys = null): array + { + $data = parent::all($keys); + $data['pid'] = $this->route('pid'); + $data['infohash'] = bin2hex($this->get('info_hash')); + $data['port'] = $this->get('port'); + + return $data; + } +} diff --git a/app/Modules/Tracker/UI/Web/routes.php b/app/Modules/Tracker/UI/Web/routes.php new file mode 100644 index 0000000..94fb097 --- /dev/null +++ b/app/Modules/Tracker/UI/Web/routes.php @@ -0,0 +1,5 @@ + [ + 'web', + ], +], __DIR__ . '/UI/Web/routes.php'); diff --git a/app/Modules/Translate/Actions/TranslateAction.php b/app/Modules/Translate/Actions/TranslateAction.php new file mode 100644 index 0000000..d6c9362 --- /dev/null +++ b/app/Modules/Translate/Actions/TranslateAction.php @@ -0,0 +1,33 @@ +get('lang'); + $data['translation'] = json_encode(array_combine($request->get('keys'), $request->get('translations')), JSON_UNESCAPED_UNICODE); + + return $this->storeTranslationTask->run($data); + } +} diff --git a/app/Modules/Translate/Actions/TranslatePageAction.php b/app/Modules/Translate/Actions/TranslatePageAction.php new file mode 100644 index 0000000..abcb1d2 --- /dev/null +++ b/app/Modules/Translate/Actions/TranslatePageAction.php @@ -0,0 +1,52 @@ +setLocale(session('lang', 'en')); + + $languages = $this->getLanguagesTask->run(); + $translations = $this->getTranslationsTask->run(); + $translationKeys = array_keys($translations->get('de')); + $translationValues = $translations->has($lang) ? $translations->get($lang) : array_fill_keys($translationKeys, null); + + $progress = count(array_values(array_filter($translationValues))) / count($translationKeys) * 100; + + return [ + 'languages' => $languages, + 'translationKeys' => $translationKeys, + 'translationValues' => $translationValues, + 'currentLang' => $lang, + 'progress' => $progress + ]; + } +} diff --git a/app/Modules/Translate/ServiceProvider.php b/app/Modules/Translate/ServiceProvider.php new file mode 100644 index 0000000..4b324fd --- /dev/null +++ b/app/Modules/Translate/ServiceProvider.php @@ -0,0 +1,21 @@ + __('German'), + 'fr' => __('French'), + 'es' => __('Spanish'), + 'pr' => __('Portuguese'), + 'hol' => __('Dutch'), + 'bel' => __('Belgian'), + 'ru' => __('Russian'), + 'it' => __('Italian'), + 'pl' => __('Polish'), + 'cz' => __('Czech'), + 'hu' => __('Hungarian'), + 'cr' => __('Croatian'), + 'ser' => __('Serbian'), + 'bul' => __('Bulgarian'), + 'gk' => __('Greek'), + 'tk' => __('Turkish'), + 'dk' => __('Danish'), + 'nor' => __('Norwegian'), + 'swe' => __('Swedish'), + 'fin' => __('Finnish'), + 'jp' => __('Japanese'), + 'ch' => __('Simplified Chinese'), + 'kor' => __('Korean'), + 'vit' => __('Vietnamese'), + 'swh' => __('Swahili'), + 'kg' => __('Klingon') + ]; + } +} diff --git a/app/Modules/Translate/Tasks/GetTranslationsTask.php b/app/Modules/Translate/Tasks/GetTranslationsTask.php new file mode 100644 index 0000000..5246cf4 --- /dev/null +++ b/app/Modules/Translate/Tasks/GetTranslationsTask.php @@ -0,0 +1,32 @@ +put($locale, $localization); + } + + return null; + }, scandir(resource_path('lang'))); + + return $translations; + } +} diff --git a/app/Modules/Translate/Tasks/StoreTranslationsTask.php b/app/Modules/Translate/Tasks/StoreTranslationsTask.php new file mode 100644 index 0000000..029a0a1 --- /dev/null +++ b/app/Modules/Translate/Tasks/StoreTranslationsTask.php @@ -0,0 +1,19 @@ +translateAction = $translateAction; + } + + /** + * @param Store $request + * @return RedirectResponse + */ + public function __invoke(Store $request): RedirectResponse + { + return $this->translateAction->run($request) ? $request->success() : $request->failed(); + } +} diff --git a/app/Modules/Translate/UI/Web/Handlers/TranslatePageHandler.php b/app/Modules/Translate/UI/Web/Handlers/TranslatePageHandler.php new file mode 100644 index 0000000..d510596 --- /dev/null +++ b/app/Modules/Translate/UI/Web/Handlers/TranslatePageHandler.php @@ -0,0 +1,48 @@ +translatePageAction = $translatePageAction; + } + + /** + * @param Request $request + * @param string $lang + * @return Application|Factory|RedirectResponse|View + */ + public function __invoke(Request $request, string $lang = 'de') + { + if ($request->has('lang')) { + return redirect()->route('translate-index', [$request->input('lang')]); + } + + $return = $this->translatePageAction->run($request, $lang); + + return view('translate::translate', $return); + } +} diff --git a/app/Modules/Translate/UI/Web/Handlers/TranslateTestHandler.php b/app/Modules/Translate/UI/Web/Handlers/TranslateTestHandler.php new file mode 100644 index 0000000..71981c9 --- /dev/null +++ b/app/Modules/Translate/UI/Web/Handlers/TranslateTestHandler.php @@ -0,0 +1,33 @@ +put(['lang' => $request->post('lang')]); + + return redirect()->route('translate-index', [$request->post('lang')]); + } +} diff --git a/app/Modules/Translate/UI/Web/Requests/Store.php b/app/Modules/Translate/UI/Web/Requests/Store.php new file mode 100644 index 0000000..f8fb429 --- /dev/null +++ b/app/Modules/Translate/UI/Web/Requests/Store.php @@ -0,0 +1,61 @@ +route('translate-index', [$this->get('lang')])->with([ + 'success' => __('Your translation has been saved.') + ]); + } + + /** + * @return RedirectResponse + */ + public function failed(): RedirectResponse + { + return redirect()->route('translate-index', [$this->get('lang')])->with([ + 'error' => __('Due to technical difficulties your translations could not be saved.') + ]); + } +} diff --git a/app/Modules/Translate/UI/Web/Views/translate.blade.php b/app/Modules/Translate/UI/Web/Views/translate.blade.php new file mode 100644 index 0000000..e3e81d4 --- /dev/null +++ b/app/Modules/Translate/UI/Web/Views/translate.blade.php @@ -0,0 +1,73 @@ + + + + + + Purpleload - Help me translate + + + +
+ @csrf +
+
+ +
+ +
+
+
+ + + +
+
+
+
+
+ {{ round($progress, 2) }}% +
+
+
+
+
+
+
+
@lang('English')
+
{{ $languages[$currentLang] }}
+
+ @foreach($translationKeys as $key) +
+
+ +
+
+ + @if(strlen($key) > 50) + + @else + + @endif +
+
+ @endforeach +
+
+ + + + diff --git a/app/Modules/Translate/UI/Web/routes.php b/app/Modules/Translate/UI/Web/routes.php new file mode 100644 index 0000000..d28d38a --- /dev/null +++ b/app/Modules/Translate/UI/Web/routes.php @@ -0,0 +1,5 @@ +name('translate-language'); +Route::get('/{lang?}', TranslatePageHandler::class)->name('translate-index'); +Route::post('store', TranslateHandler::class)->name('translate-store'); +Route::post('test', TranslateTestHandler::class)->name('translate-test'); \ No newline at end of file diff --git a/app/Modules/Translate/module.php b/app/Modules/Translate/module.php new file mode 100644 index 0000000..19fe418 --- /dev/null +++ b/app/Modules/Translate/module.php @@ -0,0 +1,9 @@ + 'LaraBB\Translate\UI\Web\Handlers', + 'middleware' => [ + 'web', + ], + 'prefix' => 'translate' +], __DIR__ . '/UI/Web/routes.php'); diff --git a/app/Modules/User/Actions/Admin/CreateAction.php b/app/Modules/User/Actions/Admin/CreateAction.php new file mode 100644 index 0000000..5fd89e7 --- /dev/null +++ b/app/Modules/User/Actions/Admin/CreateAction.php @@ -0,0 +1,38 @@ + "\Illuminate\Database\Eloquent\Collection|mixed|null", + 'active' => "string", + 'subactive' => "string" + ])] + public function run(): array + { + return [ + 'groups' => $this->findGroupTask->run(), + 'active' => 'users', + 'subactive' => 'user' + ]; + } +} diff --git a/app/Modules/User/Actions/Admin/DestroyAction.php b/app/Modules/User/Actions/Admin/DestroyAction.php new file mode 100644 index 0000000..e21f31d --- /dev/null +++ b/app/Modules/User/Actions/Admin/DestroyAction.php @@ -0,0 +1,51 @@ +findUserTask->byUuid($request->post('uuid')); + + try { + $this->db->transaction(function () use ($user) { + $this->destroyUserTask->run($user); + }); + } catch (Throwable $t) { + return false; + } + + return true; + } +} diff --git a/app/Modules/User/Actions/Admin/EditAction.php b/app/Modules/User/Actions/Admin/EditAction.php new file mode 100644 index 0000000..a6d9e2d --- /dev/null +++ b/app/Modules/User/Actions/Admin/EditAction.php @@ -0,0 +1,46 @@ + "\LaraBB\User\Models\User", + 'groups' => "\Illuminate\Database\Eloquent\Collection|mixed|null", + 'active' => "string", + 'subactive' => "string" + ])] + public function run(Edit $request): array + { + return [ + 'user' => $this->findUserTask->byUuid($request->route('uuid'), ['groups']), + 'groups' => $this->findGroupTask->all(), + 'active' => 'users', + 'subactive' => 'user' + ]; + } +} diff --git a/app/Modules/User/Actions/Admin/IndexAction.php b/app/Modules/User/Actions/Admin/IndexAction.php new file mode 100644 index 0000000..0f9011a --- /dev/null +++ b/app/Modules/User/Actions/Admin/IndexAction.php @@ -0,0 +1,37 @@ + "mixed", + 'active' => "string" + ])] + public function run(): array + { + return [ + 'users' => $this->findUserTask->all(['groups']), + 'active' => 'users' + ]; + } +} diff --git a/app/Modules/User/Actions/Admin/StoreAction.php b/app/Modules/User/Actions/Admin/StoreAction.php new file mode 100644 index 0000000..fffefa5 --- /dev/null +++ b/app/Modules/User/Actions/Admin/StoreAction.php @@ -0,0 +1,115 @@ +connection->transaction(function() use($request) { + $user = $this->storeUserTask->run($this->prepareUserData($request)); + $this->storeProfileTask->run($this->prepareProfileData($request, $user)); + }); + } catch(Throwable $t) { + return false; + } + + return true; + } + + /** + * @param Store $request + * @return array + */ + private function prepareUserData(Store $request): array + { + return [ + 'pid' => md5(uniqid(mt_rand(), true)), + 'created_uuid' => $request->user()->uuid, + 'updated_uuid' => $request->user()->uuid, + 'deactivated_at' => $request->has('account-disabled') ? now() : null, + 'deactivated_uuid' => $request->has('account-disabled') ? $request->user()->uuid : null, + 'registered_at' => now(), + 'registered_ip' => $request->ip(), + 'username' => $request->post('username'), + 'email_hashed' => $request->post('email'), + 'email_encrypted' => $request->post('email'), + 'password' => Hash::make($request->post('password')), + 'passwordchange_required' => $request->has('force-password-change'), + 'groups' => $this->prepareGroupData($request) + ]; + } + + /** + * @param Store $request + * @return array + */ + private function prepareGroupData(Store $request): array + { + $return = []; + + foreach ($request->post('groups') as $group) { + $return[$group] = [ + 'uuid' => Uuid::uuid4(), + 'created_at' => now(), + 'created_uuid' => $request->user()->uuid, + 'updated_at' => now(), + 'updated_uuid' => $request->user()->uuid + ]; + } + + return $return; + } + + /** + * @param Store $request + * @param User $user + * @return array + */ + #[ArrayShape([ + 'user_uuid' => "string", + 'created_uuid' => "mixed", + 'updated_uuid' => "mixed" + ])] + private function prepareProfileData(Store $request, User $user): array + { + return [ + 'user_uuid' => $user->uuid, + 'created_uuid' => $request->user()->uuid, + 'updated_uuid' => $request->user()->uuid, + ]; + } +} diff --git a/app/Modules/User/Actions/Admin/UpdateAction.php b/app/Modules/User/Actions/Admin/UpdateAction.php new file mode 100644 index 0000000..93ec79c --- /dev/null +++ b/app/Modules/User/Actions/Admin/UpdateAction.php @@ -0,0 +1,102 @@ +findUserTask->byUuid($request->post('uuid')); + + try { + $this->connection->transaction(function () use ($user, $request) { + $this->updateUserTask->run($user, $this->prepareUserData($request, $user)); + }); + } catch (Throwable $t) { + return false; + } + + return true; + } + + /** + * @param Update $request + * @param User $user + * @return array + */ + #[ArrayShape([ + 'updated_uuid' => "mixed", + 'deactivated_at' => "\Illuminate\Support\Carbon|null", + 'deactivated_uuid' => "mixed", + 'username' => "array|null|string", + 'email_hashed' => "array|null|string", + 'email_encrypted' => "array|null|string", + 'password' => "array|string", + 'passwordchange_required' => "bool", + 'groups' => "array" + ])] private function prepareUserData(Update $request, User $user): array + { + return [ + 'updated_uuid' => $request->user()->uuid, + 'deactivated_at' => $request->has('account-disabled') ? now() : null, + 'deactivated_uuid' => $request->has('account-disabled') ? $request->user()->uuid : null, + 'username' => $request->post('username'), + 'email_hashed' => $request->post('email'), + 'email_encrypted' => $request->post('email'), + 'password' => $request->post('password') ?? $user->password, + 'passwordchange_required' => $request->has('force-password-change'), + 'groups' => $this->prepareGroupData($request) + ]; + } + + /** + * @param Update $request + * @return array + */ + private function prepareGroupData(Update $request): array + { + $return = []; + + foreach ($request->post('groups') as $group) { + $return[$group] = [ + 'uuid' => Uuid::uuid4(), + 'created_at' => now(), + 'created_uuid' => $request->user()->uuid, + 'updated_at' => now(), + 'updated_uuid' => $request->user()->uuid + ]; + } + + return $return; + } +} diff --git a/app/Modules/User/Actions/LoginAction.php b/app/Modules/User/Actions/LoginAction.php new file mode 100644 index 0000000..8956542 --- /dev/null +++ b/app/Modules/User/Actions/LoginAction.php @@ -0,0 +1,28 @@ +attempt([ + 'email_hashed' => hash('sha512', $request->post('login-email')), + 'password' => $request->post('login-password') + ], $request->has('remember-me')); + } +} diff --git a/app/Modules/User/Actions/RegisterAction.php b/app/Modules/User/Actions/RegisterAction.php new file mode 100644 index 0000000..a64d6b8 --- /dev/null +++ b/app/Modules/User/Actions/RegisterAction.php @@ -0,0 +1,25 @@ + "mixed"])] + public function run(Show $request): array + { + return [ + 'code' => $this->findInviteTask->byCode($request->route('code')) + ]; + } +} diff --git a/app/Modules/User/Data/Migrations/2020_06_30_135438_create_users_table.php b/app/Modules/User/Data/Migrations/2020_06_30_135438_create_users_table.php new file mode 100644 index 0000000..1eff72c --- /dev/null +++ b/app/Modules/User/Data/Migrations/2020_06_30_135438_create_users_table.php @@ -0,0 +1,45 @@ +increments('id'); + $table->uuid('uuid')->unique('uuid'); + $table->char('pid', 32)->index('pid'); + $table->dateTime('created_at'); + $table->uuid('created_uuid')->index('created_uuid'); + $table->dateTime('updated_at'); + $table->uuid('updated_uuid')->index('updated_uuid'); + $table->dateTime('registered_at'); + $table->string('registered_ip', 255); + $table->dateTime('lastactive_at'); + $table->string('lastactive_ip', 255); + $table->string('username', 255)->unique('username'); + $table->text('email_hashed')->unique('email_hashed'); + $table->text('email_encrypted'); + $table->string('password', 255); + $table->rememberToken(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('users'); + } +} diff --git a/app/Modules/User/Data/Migrations/2020_07_01_085353_create_users_has_groups_table.php b/app/Modules/User/Data/Migrations/2020_07_01_085353_create_users_has_groups_table.php new file mode 100644 index 0000000..5220ee9 --- /dev/null +++ b/app/Modules/User/Data/Migrations/2020_07_01_085353_create_users_has_groups_table.php @@ -0,0 +1,37 @@ +increments('id'); + $table->uuid('uuid')->unique('uuid'); + $table->dateTime('created_at'); + $table->uuid('created_uuid')->index('created_uuid'); + $table->dateTime('updated_at'); + $table->uuid('updated_uuid')->index('updated_uuid'); + $table->uuid('user_uuid')->index('user_uuid'); + $table->uuid('group_uuid')->index('group_uuid'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('users_has_groups'); + } +} diff --git a/app/Modules/User/Data/Migrations/2020_11_03_100418_create_users_profiles_table.php b/app/Modules/User/Data/Migrations/2020_11_03_100418_create_users_profiles_table.php new file mode 100644 index 0000000..3b39062 --- /dev/null +++ b/app/Modules/User/Data/Migrations/2020_11_03_100418_create_users_profiles_table.php @@ -0,0 +1,63 @@ +id(); + $table->uuid('uuid')->index('uuid'); + $table->uuid('user_uuid')->index('user_uuid'); + $table->dateTime('created_at'); + $table->uuid('created_uuid')->index('created_uuid'); + $table->dateTime('updated_at'); + $table->uuid('updated_uuid')->index('updated_uuid'); + $table->char('language', 5)->default('en'); + $table->boolean('invisible')->default(0); + $table->string('usertitle', 255)->nullable(); + $table->string('avatar', 255)->nullable(); + $table->text('signature')->nullable(); + $table->string('website', 255)->nullable(); + $table->string('skype', 255)->nullable(); + $table->dateTime('birthday')->nullable(); + $table->tinyInteger('birthday_privacy')->unsigned()->default(0); + $table->boolean('birthday_greeting')->default(1); + $table->boolean('receive_messages')->default(1); + $table->boolean('show_avatars')->default(1); + $table->boolean('show_signatures')->default(1); + $table->tinyInteger('posts_per_page')->unsigned()->default(15); + $table->tinyInteger('threads_per_page')->unsigned()->default(15); + $table->char('dateformat', 50)->default('Y-m-d'); + $table->char('timeformat', 50)->default('H:i'); + $table->char('timezone', 50)->default('UTC'); + $table->boolean('dst')->default(0); + $table->tinyInteger('dstcorrection')->default(0); + $table->text('notes')->nullable(); + $table->bigInteger('uploaded')->unsigned()->default(0); + $table->bigInteger('downloaded')->unsigned()->default(0); + $table->double('ratio')->unsigned()->default(0); + $table->boolean('can_download')->default(1); + $table->boolean('can_upload')->default(1); + $table->tinyInteger('waiting_time')->unsigned()->default(0); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('users_profiles'); + } +} diff --git a/app/Modules/User/Data/Migrations/2021_06_29_004350_create_users_files_table.php b/app/Modules/User/Data/Migrations/2021_06_29_004350_create_users_files_table.php new file mode 100644 index 0000000..8b34ae4 --- /dev/null +++ b/app/Modules/User/Data/Migrations/2021_06_29_004350_create_users_files_table.php @@ -0,0 +1,35 @@ +id(); + $table->uuid('uuid')->index('uuid'); + $table->dateTime('created_at'); + $table->uuid('created_uuid')->index('created_uuid'); + $table->dateTime('updated_at'); + $table->uuid('updated_uuid')->index('updated_uuid'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('users_files'); + } +} diff --git a/app/Modules/User/Models/User.php b/app/Modules/User/Models/User.php new file mode 100644 index 0000000..e7e9f63 --- /dev/null +++ b/app/Modules/User/Models/User.php @@ -0,0 +1,142 @@ + 'datetime:d.m.Y H:i:s', + 'registered_at' => 'datetime:d.m.Y H:i:s', + 'lastactive_at' => 'datetime:d.m.Y H:i:s' + ]; + + /** + * The attributes that should be hidden for arrays. + * + * @var array + */ + protected $hidden = [ + 'password', + 'remember_token', + ]; + /** + * @var Collection|mixed + */ + public Collection $forumPermissions; + + /** + * @return HasOne + */ + public function profile(): HasOne + { + return $this->hasOne(Profile::class, 'user_uuid', 'uuid'); + } + + /** + * @return BelongsToMany + */ + public function groups(): BelongsToMany + { + return $this->belongsToMany(Group::class, 'users_has_groups', 'user_uuid', 'group_uuid'); + } + + /** + * @return HasMany + */ + public function invites(): HasMany + { + return $this->hasMany(Invite::class, 'created_uuid', 'uuid'); + } + + /** + * @param array $groups + * @return bool + */ + public function isInGroup(array $groups): bool + { + $isInGroup = false; + foreach($groups as $group) { + $isInGroup = $this->groups->contains('group', $group); + if($isInGroup) break; + } + + return $isInGroup; + } + + /** + * @return Attribute + */ + public function emailEncrypted(): Attribute + { + return Attribute::make( + get: fn($value) => decrypt($value), + set: fn($value) => encrypt($value) + ); + } + + /** + * @return Attribute + */ + public function emailHashed(): Attribute + { + return Attribute::make( + set: fn($value) => hash('sha512', $value) + ); + } +} diff --git a/app/Modules/User/ServiceProvider.php b/app/Modules/User/ServiceProvider.php new file mode 100644 index 0000000..57ad611 --- /dev/null +++ b/app/Modules/User/ServiceProvider.php @@ -0,0 +1,21 @@ +groups()->detach(); + $user->profile->delete(); + + return $user->delete(); + } +} diff --git a/app/Modules/User/Tasks/FindTask.php b/app/Modules/User/Tasks/FindTask.php new file mode 100644 index 0000000..d41d86f --- /dev/null +++ b/app/Modules/User/Tasks/FindTask.php @@ -0,0 +1,71 @@ +user->query()->with($with)->get(); + } + + /** + * @param string $uuid + * @param array $with + * @return User + */ + public function byUuid(string $uuid, array $with = []): User + { + return $this->user->query()->where('uuid', $uuid)->with($with)->get()->first(); + } + + /** + * @param string $username + * @param array $with + * @return User + */ + public function byUsername(string $username, array $with = []): User + { + return $this->user->query()->where('username', $username)->with($with)->get()->first(); + } + + /** + * @param string $email + * @param array $with + * @return User + */ + public function byEmail(string $email, array $with = []): User + { + return $this->user->query()->where('email_hashed', hash('sha512', $email))->with($with)->get()->first(); + } + + /** + * @param string $pid + * @param array $with + * @return User|null + */ + public function byPid(string $pid, array $with = []): User|null + { + return $this->user->query()->where('pid', $pid)->with($with)->get()->first(); + } +} diff --git a/app/Modules/User/Tasks/StoreTask.php b/app/Modules/User/Tasks/StoreTask.php new file mode 100644 index 0000000..a8e22a4 --- /dev/null +++ b/app/Modules/User/Tasks/StoreTask.php @@ -0,0 +1,47 @@ +user->pid = $data['pid']; + $this->user->created_uuid = $data['created_uuid']; + $this->user->updated_uuid = $data['updated_uuid']; + $this->user->deactivated_at = $data['deactivated_at']; + $this->user->deactivated_uuid = $data['deactivated_uuid']; + $this->user->registered_at = $data['registered_at']; + $this->user->registered_ip = $data['registered_ip']; + $this->user->username = $data['username']; + $this->user->email_hashed = $data['email_hashed']; + $this->user->email_encrypted = $data['email_encrypted']; + $this->user->password = $data['password']; + $this->user->passwordchange_required = $data['passwordchange_required']; + + $this->user->save(); + $this->user->groups()->attach($data['groups']); + + + return $this->user; + } +} diff --git a/app/Modules/User/Tasks/UpdateTask.php b/app/Modules/User/Tasks/UpdateTask.php new file mode 100644 index 0000000..79469d2 --- /dev/null +++ b/app/Modules/User/Tasks/UpdateTask.php @@ -0,0 +1,34 @@ +updated_uuid = $data['updated_uuid'] ?? $user->updated_uuid; + $user->deactivated_at = $data['deactivated_at'] ?? $user->deactivated_at; + $user->deactivated_uuid = $data['deactivated_uuid'] ?? $user->deactivated_uuid; + $user->username = $data['username'] ?? $user->username; + $user->email_hashed = $data['email_hashed'] ?? $user->email_hashed; + $user->email_encrypted = $data['email_encrypted'] ?? $user->email_encrypted; + $user->password = $data['password'] ?? $user->password; + + if(isset($data['groups'])) { + $user->groups()->sync($data['groups']); + } + + return $user->save(); + } +} diff --git a/app/Modules/User/UI/Web/Handlers/Admin/CreateHandler.php b/app/Modules/User/UI/Web/Handlers/Admin/CreateHandler.php new file mode 100644 index 0000000..2dc525c --- /dev/null +++ b/app/Modules/User/UI/Web/Handlers/Admin/CreateHandler.php @@ -0,0 +1,33 @@ +view->make('user::admin.create-edit', $this->createAction->run()); + } +} diff --git a/app/Modules/User/UI/Web/Handlers/Admin/DestroyHandler.php b/app/Modules/User/UI/Web/Handlers/Admin/DestroyHandler.php new file mode 100644 index 0000000..1b3a965 --- /dev/null +++ b/app/Modules/User/UI/Web/Handlers/Admin/DestroyHandler.php @@ -0,0 +1,35 @@ +destroyAction->run($request) ? $request->success() : $request->failed(); + } +} diff --git a/app/Modules/User/UI/Web/Handlers/Admin/EditHandler.php b/app/Modules/User/UI/Web/Handlers/Admin/EditHandler.php new file mode 100644 index 0000000..c62ca4b --- /dev/null +++ b/app/Modules/User/UI/Web/Handlers/Admin/EditHandler.php @@ -0,0 +1,35 @@ +view->make('user::admin.create-edit', $this->editAction->run($request)); + } +} diff --git a/app/Modules/User/UI/Web/Handlers/Admin/IndexHandler.php b/app/Modules/User/UI/Web/Handlers/Admin/IndexHandler.php new file mode 100644 index 0000000..f50c710 --- /dev/null +++ b/app/Modules/User/UI/Web/Handlers/Admin/IndexHandler.php @@ -0,0 +1,33 @@ +view->make('user::admin.index', $this->indexAction->run()); + } +} diff --git a/app/Modules/User/UI/Web/Handlers/Admin/StoreHandler.php b/app/Modules/User/UI/Web/Handlers/Admin/StoreHandler.php new file mode 100644 index 0000000..e290796 --- /dev/null +++ b/app/Modules/User/UI/Web/Handlers/Admin/StoreHandler.php @@ -0,0 +1,32 @@ +storeAction->run($request) ? $request->success() : $request->failed(); + } +} diff --git a/app/Modules/User/UI/Web/Handlers/Admin/UpdateHandler.php b/app/Modules/User/UI/Web/Handlers/Admin/UpdateHandler.php new file mode 100644 index 0000000..ccd0c47 --- /dev/null +++ b/app/Modules/User/UI/Web/Handlers/Admin/UpdateHandler.php @@ -0,0 +1,32 @@ +updateAction->run($request) ? $request->success() : $request->failed(); + } +} diff --git a/app/Modules/User/UI/Web/Handlers/LoginHandler.php b/app/Modules/User/UI/Web/Handlers/LoginHandler.php new file mode 100644 index 0000000..df5962b --- /dev/null +++ b/app/Modules/User/UI/Web/Handlers/LoginHandler.php @@ -0,0 +1,32 @@ +loginAction->run($request) ? $request->success() : $request->failed(); + } +} diff --git a/app/Modules/User/UI/Web/Handlers/LoginPageHandler.php b/app/Modules/User/UI/Web/Handlers/LoginPageHandler.php new file mode 100644 index 0000000..7d6d5a3 --- /dev/null +++ b/app/Modules/User/UI/Web/Handlers/LoginPageHandler.php @@ -0,0 +1,28 @@ +logout(); + + return $request->success(); + } +} diff --git a/app/Modules/User/UI/Web/Handlers/LostPasswordHandler.php b/app/Modules/User/UI/Web/Handlers/LostPasswordHandler.php new file mode 100644 index 0000000..b191072 --- /dev/null +++ b/app/Modules/User/UI/Web/Handlers/LostPasswordHandler.php @@ -0,0 +1,20 @@ +registerAction->run($request) ? $request->success() : $request->failed(); + } +} diff --git a/app/Modules/User/UI/Web/Handlers/RegisterPageHandler.php b/app/Modules/User/UI/Web/Handlers/RegisterPageHandler.php new file mode 100644 index 0000000..58d360a --- /dev/null +++ b/app/Modules/User/UI/Web/Handlers/RegisterPageHandler.php @@ -0,0 +1,35 @@ +view->make('user::register', $this->registerPageAction->run($request)); + } +} diff --git a/app/Modules/User/UI/Web/Requests/Destroy.php b/app/Modules/User/UI/Web/Requests/Destroy.php new file mode 100644 index 0000000..8f1ff56 --- /dev/null +++ b/app/Modules/User/UI/Web/Requests/Destroy.php @@ -0,0 +1,64 @@ + 'required|uuid|exists:users,uuid', + ]; + } + + /** + * @return array|string[] + */ + public function messages(): array + { + return [ + 'uuid.required' => 'Es wurde keine UUID übergeben.', + 'uuid.uuid' => 'Die übergebene UUID ist ungültig.', + 'uuid.exists' => 'Der zu löschende Benutzer existiert nicht.', + ]; + } + + /** + * @return RedirectResponse + */ + public function success(): RedirectResponse + { + return redirect()->route('admin.users')->with([ + 'success' => 'Der Benutzer wurde erfolgreich gelöscht.', + 'alert-options' => 'aside' + ]); + } + + /** + * @return RedirectResponse + */ + public function failed(): RedirectResponse + { + return redirect()->route('admin.users')->with([ + 'error' => 'Der Benutzer konnte aufgrund einer technichen Störung nicht gelöscht werden.' + ]); + } +} diff --git a/app/Modules/User/UI/Web/Requests/Edit.php b/app/Modules/User/UI/Web/Requests/Edit.php new file mode 100644 index 0000000..fba0085 --- /dev/null +++ b/app/Modules/User/UI/Web/Requests/Edit.php @@ -0,0 +1,47 @@ + 'required|uuid|exists:users,uuid' + ]; + } + + /** + * @return array|string[] + */ + public function messages(): array + { + return [ + 'uuid.required' => 'Es wurde keine UUID übergeben.', + 'uuid.uuid' => 'Die übergebene UUID ist ungültig.', + 'uuid.exists' => 'Der zu bearbeitende Benutzer existiert nicht.' + ]; + } + + /** + * @param null $keys + * @return array + */ + public function all($keys = null): array + { + $data = parent::all($keys); + $data['uuid'] = $this->route('uuid'); + + return $data; + } +} diff --git a/app/Modules/User/UI/Web/Requests/Login.php b/app/Modules/User/UI/Web/Requests/Login.php new file mode 100644 index 0000000..f2e3912 --- /dev/null +++ b/app/Modules/User/UI/Web/Requests/Login.php @@ -0,0 +1,66 @@ + 'required|email', + 'login-password' => 'required' + ]; + } + + /** + * @return array + */ + public function messages(): array + { + return [ + 'login-email.required' => __('Please enter an email address.'), + 'login-email.email' => __('The given email address has an invalid format.'), + 'login-password.required' => __('Please enter a password.') + ]; + } + + /** + * @return RedirectResponse + */ + public function success(): RedirectResponse + { + return redirect()->route('index'); + } + + /** + * @return RedirectResponse + */ + public function failed(): RedirectResponse + { + return redirect()->back()->with([ + 'error' => __('Incorrect credentials.') + ]); + } +} diff --git a/app/Modules/User/UI/Web/Requests/Logout.php b/app/Modules/User/UI/Web/Requests/Logout.php new file mode 100644 index 0000000..496800e --- /dev/null +++ b/app/Modules/User/UI/Web/Requests/Logout.php @@ -0,0 +1,57 @@ +back()->with([ + 'success' => __('You have been successfully logged out.') + ]); + } + + /** + * @return RedirectResponse + */ + public function failed(): RedirectResponse + { + return redirect()->back()->with([ + 'error' => __('Due to a technical problem, you could not be logged out.') + ]); + } +} diff --git a/app/Modules/User/UI/Web/Requests/Register/Show.php b/app/Modules/User/UI/Web/Requests/Register/Show.php new file mode 100644 index 0000000..4e72b5d --- /dev/null +++ b/app/Modules/User/UI/Web/Requests/Register/Show.php @@ -0,0 +1,73 @@ + "string"])] + public function rules(): array + { + return [ + 'code' => 'nullable|exists:users_invites,code' + ]; + } + + /** + * @return array + */ + #[ArrayShape(['code.exists' => "mixed"])] + public function messages(): array + { + return [ + 'code.exists' => __('The given invite code is invalid. Redirecting to guest registration.') + ]; + } + + /** + * @param null $keys + * @return array + */ + public function all($keys = null): array + { + $data = parent::all($keys); + $data['code'] = $this->route('code'); + + return $data; + } + + /** + * @param Validator $validator + * @throws ValidationException + */ + public function failedValidation(Validator $validator) + { + session()->flash('alert-options', 'auto-hide'); + + parent::failedValidation($validator); // TODO: Change the autogenerated stub + } +} diff --git a/app/Modules/User/UI/Web/Requests/Register/Store.php b/app/Modules/User/UI/Web/Requests/Register/Store.php new file mode 100644 index 0000000..4a1035e --- /dev/null +++ b/app/Modules/User/UI/Web/Requests/Register/Store.php @@ -0,0 +1,66 @@ +route('register-page', ['#step3']); + } + + /** + * @return RedirectResponse + */ + public function failed(): RedirectResponse + { + return redirect()->route('register-page', ['#step2']); + } + + /** + * @return string + */ + public function getRedirectUrl(): string + { + return parent::getRedirectUrl() . '#step-2'; + } +} diff --git a/app/Modules/User/UI/Web/Requests/Store.php b/app/Modules/User/UI/Web/Requests/Store.php new file mode 100644 index 0000000..d10dfdc --- /dev/null +++ b/app/Modules/User/UI/Web/Requests/Store.php @@ -0,0 +1,69 @@ +getRules('user', ['uuid']); + $rules['password'] = str_replace('nullable', 'required', $rules['password']); + $rules['groups.*'] = [ + Rule::in(Group::all()->pluck('uuid')->toArray()) + ]; + + return $rules; + } + + /** + * @return array|string[] + */ + public function messages(): array + { + return $this->getMessages('user', ['uuid']); + } + + /** + * @return RedirectResponse + */ + public function success(): RedirectResponse + { + return redirect()->route('admin.users')->with([ + 'success' => 'Das Benutzerkonto wurde erfolgreich erstellt.', + 'alert-options' => 'aside' + ]); + } + + /** + * @return RedirectResponse + */ + public function failed(): RedirectResponse + { + return redirect()->route('admin.users.create')->with([ + 'error' => 'Das Benutzerkonto konnte aufgrund einer technischen Störung nicht erstellt werden.' + ])->withInput(); + } +} diff --git a/app/Modules/User/UI/Web/Requests/Update.php b/app/Modules/User/UI/Web/Requests/Update.php new file mode 100644 index 0000000..85415fa --- /dev/null +++ b/app/Modules/User/UI/Web/Requests/Update.php @@ -0,0 +1,69 @@ +getRules('user', ['username.unique']); + $rules['groups.*'] = [ + Rule::in(Group::all()->pluck('uuid')->toArray()) + ]; + + return $rules; + } + + /** + * @return array + */ + public function messages(): array + { + + return $this->getMessages('user', ['username.unique']); + } + + /** + * @return RedirectResponse + */ + public function success(): RedirectResponse + { + return redirect()->route('admin.users.edit', [$this->post('uuid')])->with([ + 'success' => 'Das Benutzerkonto wurde erfolgreich bearbeitet.', + 'alert-options' => 'aside' + ]); + } + + /** + * @return RedirectResponse + */ + public function failed(): RedirectResponse + { + return redirect()->route('admin.users.edit', [$this->post('uuid')])->with([ + 'error' => 'Das Benutzerkonto konnte aufgrund einer technischen Störung nicht bearbeitet werden.' + ])->withInput(); + } +} diff --git a/app/Modules/User/UI/Web/Views/admin/create-edit.blade.php b/app/Modules/User/UI/Web/Views/admin/create-edit.blade.php new file mode 100644 index 0000000..4f39529 --- /dev/null +++ b/app/Modules/User/UI/Web/Views/admin/create-edit.blade.php @@ -0,0 +1,121 @@ +@php + /** @var LaraBB\User\Models\User $user */ + /** @var LaraBB\Group\Models\Group $group */ +@endphp +@extends('admin::Layouts.master') +@section('pagecss') + +@stop +@section('content') +
+ @include('partials.messages') + +
+ @csrf + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ +
+ + + +
+
+
+ + +
+
+
+
+ @if(!isset($user)) +
+ + +
+ @endif +
+ passwordchange_required ? ' checked' : '' }}> + +
+
+ deactivated_at ? ' checked' : '' }}> + +
+
+
+
+
+ @include('partials.button', ['context' => 'primary', 'type' => 'submit', 'icon' => 'save', 'label' => 'Speichern']) +
+
+
+
+@stop +@section('pagejs') + + +@stop diff --git a/app/Modules/User/UI/Web/Views/admin/index.blade.php b/app/Modules/User/UI/Web/Views/admin/index.blade.php new file mode 100644 index 0000000..d009384 --- /dev/null +++ b/app/Modules/User/UI/Web/Views/admin/index.blade.php @@ -0,0 +1,63 @@ +@php /** @var LaraBB\User\Models\User $user */ @endphp +@extends('admin::Layouts.master') +@section('content') +
+ @include('partials.messages') +
+
+ @include('partials.button', ['context' => 'primary', 'href' => 'admin.users.create', 'parameters' => [], 'icon' => 'plus', 'label' => 'Neuen Benutzer erstellen']) +
+
+
+ + +
+
+
+
+
Benutzername
+
E-Mail Adresse
+
Gruppen
+
Registriert
+
+ @forelse($users as $user) +
+ +
+ {{ $user->email_encrypted }} +
+
+ @foreach($user->groups as $group) +
+   {{ $group->group }} +
+ @endforeach +
+
+ {{ $user->created_at->format('d.m.Y - H:i \U\h\r') }} +
+
+
+ @csrf + + +
+
+
+ @if(!$loop->last)
@endif + @empty +
+
+ Es sind keine Benutzer in der Datenbank vorhanden. +
+
+ @endforelse + @include('partials.button', ['context' => 'primary', 'href' => 'admin.users.create', 'parameters' => [], 'icon' => 'plus', 'label' => 'Neuen Benutzer erstellen']) +
+@stop diff --git a/app/Modules/User/UI/Web/Views/partials/login-register.blade.php b/app/Modules/User/UI/Web/Views/partials/login-register.blade.php new file mode 100644 index 0000000..5a4ca7d --- /dev/null +++ b/app/Modules/User/UI/Web/Views/partials/login-register.blade.php @@ -0,0 +1,37 @@ +@if($currentUser->isInGroup(['Guest'])) + + + @lang('Sign Up') + +@else +
+ @csrf + +
+@endguest diff --git a/app/Modules/User/UI/Web/Views/register-user.blade.php b/app/Modules/User/UI/Web/Views/register-user.blade.php new file mode 100644 index 0000000..0137ad3 --- /dev/null +++ b/app/Modules/User/UI/Web/Views/register-user.blade.php @@ -0,0 +1,135 @@ +@extends('layouts.master') +@section('pagecss') + +@stop +@section('content') +
+ @csrf + @include('partials.messages') +
+
+
+ +
+
+

+ Whilst we attempt to edit or remove any messages containing inappropriate, sexually + orientated, abusive, hateful, slanderous, or threatening material that could be + considered invasive of a person's privacy, or which otherwise violate any kind of law, + it is impossible for us to review every message posted on this discussion system. For + this reason you acknowledge that all messages posted on this discussion system express + the views and opinions of the original message author and not necessarily the views of + this bulletin board. Therefore we take no responsibility and cannot be held liable for + any messages posted. We do not vouch for or warrant the accuracy and completeness of + every message. +

+

+ By registering on this discussion system you agree that you will not post any material + which is knowingly false, inaccurate, abusive, hateful, harassing, sexually orientated, + threatening or invasive of a person's privacy, or any other material which may violate + any applicable laws. +

+

+ Failure to comply with these rules may result in the termination of your account, + account suspension, or permanent ban of access to these forums. Your IP Address is + recorded with each post you make on this discussion system and is retrievable by the + forum staff if need-be. You agree that we have the ability and right to remove, edit, + or lock any account or message at any time should it be seen fit. You also agree that + any information you enter on this discussion system is stored in a database, and that + "cookies" are stored on your computer to save your login information. +

+

+ Any information you provide on these forums will not be disclosed to any third party + without your complete consent, although the staff cannot be held liable for any hacking + attempt in which your data is compromised. +

+
+

+ The account you are about to create will expire after 4 weeks. +

+

+ Within this 4 weeks you can view all threads marked as "public" by the respective creator. +

+

+ You'll not have the possibility to create threads or postings. Furthermore these accounts + do not have any profile data, therefore you can't have an avatar, use the internal message + system or subscribe to any subforums. +

+

+ If you keep your sharing ratio above 1.0 within this 4 weeks, you will have the opportunity + to convert your temporary account to a permanent account. The sharing ratio is calculated + by the amounts of bytes you downloaded and uploaded. +

+
+

+ By continuing with the sign up process you agree to the above rules and any others that + the Administrator specifies. +

+ + @lang('Continue') + +
+
+ +
+
+ + +
+ +
+
+
+ +

+ @lang('An email with generated credentials and a confirmation code has been dispatched to the provided email address.') +

+

+ @lang('Please confirm your registration by entering the confirmation code from the email.') +

+
+ + +
+ +
+
+
+
+
+
+@stop +@section('pagejs') + + +@stop diff --git a/app/Modules/User/UI/Web/routes.php b/app/Modules/User/UI/Web/routes.php new file mode 100644 index 0000000..65f1eee --- /dev/null +++ b/app/Modules/User/UI/Web/routes.php @@ -0,0 +1,55 @@ + 'user' +], function() { + // Non-authenticated user actions + Route::get('register/{invitecode?}', RegisterPageHandler::class)->name('register-page'); + Route::post('register', RegisterHandler::class)->name('register'); + Route::post('register/confirm', RegisterConfirmHandler::class)->name('register-confirm'); + Route::get('login', LoginPageHandler::class)->name('login-page'); + Route::post('login', LoginHandler::class)->name('login'); + Route::get('lostpassword', LostPasswordPageHandler::class)->name('lost-password-page'); + Route::post('lostpassword', LostPasswordHandler::class)->name('lost-password'); + + // Authenticated user actions + Route::group([ + 'middleware' => [ + 'auth' + ] + ], function() { + Route::post('logout', LogoutHandler::class)->name('logout'); + }); +}); + +// Admin User routes +Route::group([ + 'prefix' => 'admin/user', + 'middleware' => [ + 'auth', + CheckAdmin::class + ] +], function() { + Route::get('/', IndexHandler::class)->name('admin.users'); + Route::get('create', CreateHandler::class)->name('admin.users.create'); + Route::get('{uuid}', EditHandler::class)->name('admin.users.edit'); + Route::post('store', StoreHandler::class)->name('admin.users.store'); + Route::post('update', UpdateHandler::class)->name('admin.users.update'); + Route::post('destroy', DestroyHandler::class)->name('admin.users.destroy'); +}); diff --git a/app/Modules/User/module.php b/app/Modules/User/module.php new file mode 100644 index 0000000..c1924b1 --- /dev/null +++ b/app/Modules/User/module.php @@ -0,0 +1,7 @@ + [ + 'web', + ] +], __DIR__ . '/UI/Web/routes.php'); diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php new file mode 100644 index 0000000..183766c --- /dev/null +++ b/app/Providers/AppServiceProvider.php @@ -0,0 +1,29 @@ + + */ + protected $policies = [ + // 'App\Models\Model' => 'App\Policies\ModelPolicy', + ]; + + /** + * Register any authentication / authorization services. + * + * @return void + */ + public function boot() + { + $this->registerPolicies(); + + // + } +} diff --git a/app/Providers/BaseServiceProvider.php b/app/Providers/BaseServiceProvider.php new file mode 100644 index 0000000..bfc2c1b --- /dev/null +++ b/app/Providers/BaseServiceProvider.php @@ -0,0 +1,91 @@ +modulePath . '/' . $this->configFile)) { + $this->mergeConfigFrom($this->modulePath . '/' . $this->configFile, $this->moduleKey); + } + /** + * Load Module routes if existent + */ + if (file_exists($this->modulePath . '/' . $this->routesFile)) { + $this->loadRoutesFrom($this->modulePath . '/' . $this->routesFile); + } + + /** + * Load Module migrations + */ + $this->loadMigrationsFrom($this->modulePath . '/' . $this->migrationsPath); + + /** + * Load Module views + */ + $this->loadViewsFrom($this->modulePath . '/' . $this->viewsPath, $this->moduleKey); + + /** + * Load Module translations + */ + $this->loadJsonTranslationsFrom($this->modulePath . '/' . $this->translationsPath); + + $this->app->make(Router::class)->pushMiddlewareToGroup('web', SetUser::class); + } + + public function shouldDiscoverEvents(): bool + { + return true; + } +} diff --git a/app/Providers/BroadcastServiceProvider.php b/app/Providers/BroadcastServiceProvider.php new file mode 100644 index 0000000..395c518 --- /dev/null +++ b/app/Providers/BroadcastServiceProvider.php @@ -0,0 +1,21 @@ +> + */ + protected $listen = [ + Registered::class => [ + SendEmailVerificationNotification::class, + ], + ]; + + /** + * Register any events for your application. + * + * @return void + */ + public function boot() + { + // + } + + /** + * Determine if events and listeners should be automatically discovered. + * + * @return bool + */ + public function shouldDiscoverEvents() + { + return false; + } +} diff --git a/app/Providers/ModuleServiceProvider.php b/app/Providers/ModuleServiceProvider.php new file mode 100644 index 0000000..3d63f67 --- /dev/null +++ b/app/Providers/ModuleServiceProvider.php @@ -0,0 +1,45 @@ +app->register($this->strProjectName . '\\' . $strServiceProviderNamespace); + + // Wenn "Modules"-Ordner in (Unter)Modul vorhanden, dann rekursiver Aufruf + $strSubModulePath = $strScanPath . $strModule . '/Modules'; + if(is_dir($strSubModulePath)) { + $this->register($strSubModulePath); + } + } + } + } +} diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php new file mode 100644 index 0000000..ea87f2e --- /dev/null +++ b/app/Providers/RouteServiceProvider.php @@ -0,0 +1,52 @@ +configureRateLimiting(); + + $this->routes(function () { + Route::middleware('api') + ->prefix('api') + ->group(base_path('routes/api.php')); + + Route::middleware('web') + ->group(base_path('routes/web.php')); + }); + } + + /** + * Configure the rate limiters for the application. + * + * @return void + */ + protected function configureRateLimiting() + { + RateLimiter::for('api', function (Request $request) { + return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip()); + }); + } +} diff --git a/app/Traits/PivotData.php b/app/Traits/PivotData.php new file mode 100644 index 0000000..9764bcf --- /dev/null +++ b/app/Traits/PivotData.php @@ -0,0 +1,31 @@ +post($index))) return []; + + $return = []; + foreach($request->post($index) as $uuid) { + $return[$uuid] = [ + 'uuid' => (string) Str::uuid(), + 'created_at' => now(), + 'created_uuid' => $request->user()->uuid, + 'updated_at' => now(), + 'updated_uuid' => $request->user()->uuid + ]; + } + + return $return; + } +} diff --git a/app/Traits/Uuid.php b/app/Traits/Uuid.php new file mode 100644 index 0000000..a43a6cd --- /dev/null +++ b/app/Traits/Uuid.php @@ -0,0 +1,58 @@ +keyType = 'string'; + $model->incrementing = false; + + if (!$model->getKey()) { + $model->{$model->getKeyName()} = (string)Str::uuid(); + } + }); + + // Set original if someone try to change UUID on update/save existing model + static::saving(function (Model $model) { + $original_id = $model->getOriginal('id'); + if (!is_null($original_id) && $model->isLockedUuid) { + if ($original_id !== $model->id) { + $model->id = $original_id; + } + } + }); + } +} diff --git a/app/Traits/Who.php b/app/Traits/Who.php new file mode 100644 index 0000000..b253a98 --- /dev/null +++ b/app/Traits/Who.php @@ -0,0 +1,29 @@ +belongsTo(User::class, 'created_uuid', 'uuid'); + } + + /** + * @return BelongsTo + */ + public function updatedBy(): BelongsTo + { + return $this->belongsTo(User::class, 'updated_uuid', 'uuid'); + } +} diff --git a/artisan b/artisan new file mode 100755 index 0000000..67a3329 --- /dev/null +++ b/artisan @@ -0,0 +1,53 @@ +#!/usr/bin/env php +make(Illuminate\Contracts\Console\Kernel::class); + +$status = $kernel->handle( + $input = new Symfony\Component\Console\Input\ArgvInput, + new Symfony\Component\Console\Output\ConsoleOutput +); + +/* +|-------------------------------------------------------------------------- +| Shutdown The Application +|-------------------------------------------------------------------------- +| +| Once Artisan has finished running, we will fire off the shutdown events +| so that any final work may be done by the application before we shut +| down the process. This is the last thing to happen to the request. +| +*/ + +$kernel->terminate($input, $status); + +exit($status); diff --git a/bootstrap/app.php b/bootstrap/app.php new file mode 100644 index 0000000..037e17d --- /dev/null +++ b/bootstrap/app.php @@ -0,0 +1,55 @@ +singleton( + Illuminate\Contracts\Http\Kernel::class, + App\Http\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Console\Kernel::class, + App\Console\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Debug\ExceptionHandler::class, + App\Exceptions\Handler::class +); + +/* +|-------------------------------------------------------------------------- +| Return The Application +|-------------------------------------------------------------------------- +| +| This script returns the application instance. The instance is given to +| the calling script so we can separate the building of the instances +| from the actual running of the application and sending responses. +| +*/ + +return $app; diff --git a/bootstrap/cache/.gitignore b/bootstrap/cache/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/bootstrap/cache/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..06ae299 --- /dev/null +++ b/composer.json @@ -0,0 +1,68 @@ +{ + "name": "laravel/laravel", + "type": "project", + "description": "The Laravel Framework.", + "keywords": ["framework", "laravel"], + "license": "MIT", + "require": { + "php": "^8.0.2", + "ext-bcmath": "*", + "barryvdh/laravel-debugbar": "^3.7", + "guzzlehttp/guzzle": "^7.2", + "laravel/framework": "^10.0", + "laravel/sanctum": "^3.2", + "laravel/tinker": "^2.7", + "rhilip/bencode": "^2.3" + }, + "require-dev": { + "fakerphp/faker": "^1.9.1", + "laravel/sail": "^1.0.1", + "mockery/mockery": "^1.4.4", + "nunomaduro/collision": "^7.0", + "phpunit/phpunit": "^10.0", + "spatie/laravel-ignition": "^2.0" + }, + "autoload": { + "psr-4": { + "App\\": "app/", + "LaraBB\\": "app/Modules", + "Database\\Factories\\": "database/factories/", + "Database\\Seeders\\": "database/seeders/" + }, + "files": [ + "app/Modules/Application/helpers.php" + ] + }, + "autoload-dev": { + "psr-4": { + "Tests\\": "tests/" + } + }, + "scripts": { + "post-autoload-dump": [ + "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", + "@php artisan package:discover --ansi" + ], + "post-update-cmd": [ + "@php artisan vendor:publish --tag=laravel-assets --ansi --force" + ], + "post-root-package-install": [ + "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" + ], + "post-create-project-cmd": [ + "@php artisan key:generate --ansi" + ] + }, + "extra": { + "laravel": { + "dont-discover": [] + } + }, + "config": { + "optimize-autoloader": true, + "preferred-install": "dist", + "sort-packages": true + }, + "minimum-stability": "stable", + "prefer-stable": true +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..ea2390a --- /dev/null +++ b/composer.lock @@ -0,0 +1,7959 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "0bd0e4462a7608d4f71107658ebbf83e", + "packages": [ + { + "name": "barryvdh/laravel-debugbar", + "version": "v3.8.1", + "source": { + "type": "git", + "url": "https://github.com/barryvdh/laravel-debugbar.git", + "reference": "aff3235fecb4104203b1e62c32239c56530eee32" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/aff3235fecb4104203b1e62c32239c56530eee32", + "reference": "aff3235fecb4104203b1e62c32239c56530eee32", + "shasum": "" + }, + "require": { + "illuminate/routing": "^9|^10", + "illuminate/session": "^9|^10", + "illuminate/support": "^9|^10", + "maximebf/debugbar": "^1.18.2", + "php": "^8.0", + "symfony/finder": "^6" + }, + "require-dev": { + "mockery/mockery": "^1.3.3", + "orchestra/testbench-dusk": "^5|^6|^7|^8", + "phpunit/phpunit": "^8.5.30|^9.0", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.8-dev" + }, + "laravel": { + "providers": [ + "Barryvdh\\Debugbar\\ServiceProvider" + ], + "aliases": { + "Debugbar": "Barryvdh\\Debugbar\\Facades\\Debugbar" + } + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Barryvdh\\Debugbar\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "PHP Debugbar integration for Laravel", + "keywords": [ + "debug", + "debugbar", + "laravel", + "profiler", + "webprofiler" + ], + "support": { + "issues": "https://github.com/barryvdh/laravel-debugbar/issues", + "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.8.1" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2023-02-21T14:21:02+00:00" + }, + { + "name": "brick/math", + "version": "0.10.2", + "source": { + "type": "git", + "url": "https://github.com/brick/math.git", + "reference": "459f2781e1a08d52ee56b0b1444086e038561e3f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/459f2781e1a08d52ee56b0b1444086e038561e3f", + "reference": "459f2781e1a08d52ee56b0b1444086e038561e3f", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^9.0", + "vimeo/psalm": "4.25.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "brick", + "math" + ], + "support": { + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/0.10.2" + }, + "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + } + ], + "time": "2022-08-10T22:54:19+00:00" + }, + { + "name": "dflydev/dot-access-data", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "f41715465d65213d644d3141a6a93081be5d3549" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/f41715465d65213d644d3141a6a93081be5d3549", + "reference": "f41715465d65213d644d3141a6a93081be5d3549", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Dflydev\\DotAccessData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.2" + }, + "time": "2022-10-27T11:44:00+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.0.6", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", + "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.3", + "phpunit/phpunit": "^8.5 || ^9.5", + "vimeo/psalm": "^4.25" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.6" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2022-10-20T09:10:12+00:00" + }, + { + "name": "doctrine/lexer", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "84a527db05647743d50373e0ec53a152f2cde568" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/84a527db05647743d50373e0ec53a152f2cde568", + "reference": "84a527db05647743d50373e0ec53a152f2cde568", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.9", + "phpunit/phpunit": "^9.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/3.0.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2022-12-15T16:57:16+00:00" + }, + { + "name": "dragonmantank/cron-expression", + "version": "v3.3.2", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "782ca5968ab8b954773518e9e49a6f892a34b2a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/782ca5968ab8b954773518e9e49a6f892a34b2a8", + "reference": "782ca5968ab8b954773518e9e49a6f892a34b2a8", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0", + "webmozart/assert": "^1.0" + }, + "replace": { + "mtdowling/cron-expression": "^1.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-webmozart-assert": "^1.0", + "phpunit/phpunit": "^7.0|^8.0|^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.2" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "time": "2022-09-10T18:51:20+00:00" + }, + { + "name": "egulias/email-validator", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "3a85486b709bc384dae8eb78fb2eec649bdb64ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/3a85486b709bc384dae8eb78fb2eec649bdb64ff", + "reference": "3a85486b709bc384dae8eb78fb2eec649bdb64ff", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^2.0 || ^3.0", + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.26" + }, + "require-dev": { + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^4.30" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2023-01-14T14:17:03+00:00" + }, + { + "name": "fruitcake/php-cors", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/fruitcake/php-cors.git", + "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/58571acbaa5f9f462c9c77e911700ac66f446d4e", + "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0", + "symfony/http-foundation": "^4.4|^5.4|^6" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Fruitcake\\Cors\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fruitcake", + "homepage": "https://fruitcake.nl" + }, + { + "name": "Barryvdh", + "email": "barryvdh@gmail.com" + } + ], + "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", + "homepage": "https://github.com/fruitcake/php-cors", + "keywords": [ + "cors", + "laravel", + "symfony" + ], + "support": { + "issues": "https://github.com/fruitcake/php-cors/issues", + "source": "https://github.com/fruitcake/php-cors/tree/v1.2.0" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2022-02-20T15:07:15+00:00" + }, + { + "name": "graham-campbell/result-type", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831", + "reference": "672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.1" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12" + }, + "type": "library", + "autoload": { + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2023-02-25T20:23:15+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.5.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b50a2a1251152e43f6a37f0fa053e730a67d25ba", + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5", + "guzzlehttp/psr7": "^1.9 || ^2.4", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", + "ext-curl": "*", + "php-http/client-integration-tests": "^3.0", + "phpunit/phpunit": "^8.5.29 || ^9.5.23", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "7.5-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.5.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2022-08-28T15:39:27+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "1.5.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "b94b2807d85443f9719887892882d0329d1e2598" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", + "reference": "b94b2807d85443f9719887892882d0329d1e2598", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.4 || ^5.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/1.5.2" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2022-08-28T14:55:35+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.4.4", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "3cf1b6d4f0c820a2cf8bcaec39fc698f3443b5cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/3cf1b6d4f0c820a2cf8bcaec39fc698f3443b5cf", + "reference": "3cf1b6d4f0c820a2cf8bcaec39fc698f3443b5cf", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.29 || ^9.5.23" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "2.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.4.4" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2023-03-09T13:19:02+00:00" + }, + { + "name": "guzzlehttp/uri-template", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/uri-template.git", + "reference": "b945d74a55a25a949158444f09ec0d3c120d69e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/b945d74a55a25a949158444f09ec0d3c120d69e2", + "reference": "b945d74a55a25a949158444f09ec0d3c120d69e2", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "symfony/polyfill-php80": "^1.17" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.19 || ^9.5.8", + "uri-template/tests": "1.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\UriTemplate\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + } + ], + "description": "A polyfill class for uri_template of PHP", + "keywords": [ + "guzzlehttp", + "uri-template" + ], + "support": { + "issues": "https://github.com/guzzle/uri-template/issues", + "source": "https://github.com/guzzle/uri-template/tree/v1.0.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template", + "type": "tidelift" + } + ], + "time": "2021-10-07T12:57:01+00:00" + }, + { + "name": "laravel/framework", + "version": "v10.3.3", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "90f24d9e2860ecf6b5492e966956270ceb98c03d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/90f24d9e2860ecf6b5492e966956270ceb98c03d", + "reference": "90f24d9e2860ecf6b5492e966956270ceb98c03d", + "shasum": "" + }, + "require": { + "brick/math": "^0.9.3|^0.10.2|^0.11", + "composer-runtime-api": "^2.2", + "doctrine/inflector": "^2.0.5", + "dragonmantank/cron-expression": "^3.3.2", + "egulias/email-validator": "^3.2.1|^4.0", + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "ext-session": "*", + "ext-tokenizer": "*", + "fruitcake/php-cors": "^1.2", + "guzzlehttp/uri-template": "^1.0", + "laravel/serializable-closure": "^1.3", + "league/commonmark": "^2.2.1", + "league/flysystem": "^3.8.0", + "monolog/monolog": "^3.0", + "nesbot/carbon": "^2.62.1", + "nunomaduro/termwind": "^1.13", + "php": "^8.1", + "psr/container": "^1.1.1|^2.0.1", + "psr/log": "^1.0|^2.0|^3.0", + "psr/simple-cache": "^1.0|^2.0|^3.0", + "ramsey/uuid": "^4.7", + "symfony/console": "^6.2", + "symfony/error-handler": "^6.2", + "symfony/finder": "^6.2", + "symfony/http-foundation": "^6.2", + "symfony/http-kernel": "^6.2", + "symfony/mailer": "^6.2", + "symfony/mime": "^6.2", + "symfony/process": "^6.2", + "symfony/routing": "^6.2", + "symfony/uid": "^6.2", + "symfony/var-dumper": "^6.2", + "tijsverkoyen/css-to-inline-styles": "^2.2.5", + "vlucas/phpdotenv": "^5.4.1", + "voku/portable-ascii": "^2.0" + }, + "conflict": { + "tightenco/collect": "<5.5.33" + }, + "provide": { + "psr/container-implementation": "1.1|2.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0" + }, + "replace": { + "illuminate/auth": "self.version", + "illuminate/broadcasting": "self.version", + "illuminate/bus": "self.version", + "illuminate/cache": "self.version", + "illuminate/collections": "self.version", + "illuminate/conditionable": "self.version", + "illuminate/config": "self.version", + "illuminate/console": "self.version", + "illuminate/container": "self.version", + "illuminate/contracts": "self.version", + "illuminate/cookie": "self.version", + "illuminate/database": "self.version", + "illuminate/encryption": "self.version", + "illuminate/events": "self.version", + "illuminate/filesystem": "self.version", + "illuminate/hashing": "self.version", + "illuminate/http": "self.version", + "illuminate/log": "self.version", + "illuminate/macroable": "self.version", + "illuminate/mail": "self.version", + "illuminate/notifications": "self.version", + "illuminate/pagination": "self.version", + "illuminate/pipeline": "self.version", + "illuminate/process": "self.version", + "illuminate/queue": "self.version", + "illuminate/redis": "self.version", + "illuminate/routing": "self.version", + "illuminate/session": "self.version", + "illuminate/support": "self.version", + "illuminate/testing": "self.version", + "illuminate/translation": "self.version", + "illuminate/validation": "self.version", + "illuminate/view": "self.version" + }, + "require-dev": { + "ably/ably-php": "^1.0", + "aws/aws-sdk-php": "^3.235.5", + "doctrine/dbal": "^3.5.1", + "ext-gmp": "*", + "fakerphp/faker": "^1.21", + "guzzlehttp/guzzle": "^7.5", + "league/flysystem-aws-s3-v3": "^3.0", + "league/flysystem-ftp": "^3.0", + "league/flysystem-path-prefixing": "^3.3", + "league/flysystem-read-only": "^3.3", + "league/flysystem-sftp-v3": "^3.0", + "mockery/mockery": "^1.5.1", + "orchestra/testbench-core": "^8.0", + "pda/pheanstalk": "^4.0", + "phpstan/phpdoc-parser": "^1.15", + "phpstan/phpstan": "^1.4.7", + "phpunit/phpunit": "^10.0.7", + "predis/predis": "^2.0.2", + "symfony/cache": "^6.2", + "symfony/http-client": "^6.2.4" + }, + "suggest": { + "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).", + "brianium/paratest": "Required to run tests in parallel (^6.0).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^3.5.1).", + "ext-apcu": "Required to use the APC cache driver.", + "ext-fileinfo": "Required to use the Filesystem class.", + "ext-ftp": "Required to use the Flysystem FTP driver.", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "ext-memcached": "Required to use the memcache cache driver.", + "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.", + "ext-pdo": "Required to use all database features.", + "ext-posix": "Required to use all features of the queue worker.", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", + "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", + "filp/whoops": "Required for friendly error pages in development (^2.14.3).", + "guzzlehttp/guzzle": "Required to use the HTTP Client and the ping methods on schedules (^7.5).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", + "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", + "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.3).", + "league/flysystem-read-only": "Required to use read-only disks (^3.3)", + "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", + "mockery/mockery": "Required to use mocking (^1.5.1).", + "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", + "phpunit/phpunit": "Required to use assertions and run tests (^9.5.8|^10.0.7).", + "predis/predis": "Required to use the predis connector (^2.0.2).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^6.2).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^6.2).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^6.2).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^6.2).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^6.2).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "10.x-dev" + } + }, + "autoload": { + "files": [ + "src/Illuminate/Collections/helpers.php", + "src/Illuminate/Events/functions.php", + "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Support/helpers.php" + ], + "psr-4": { + "Illuminate\\": "src/Illuminate/", + "Illuminate\\Support\\": [ + "src/Illuminate/Macroable/", + "src/Illuminate/Collections/", + "src/Illuminate/Conditionable/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Laravel Framework.", + "homepage": "https://laravel.com", + "keywords": [ + "framework", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2023-03-09T14:00:53+00:00" + }, + { + "name": "laravel/sanctum", + "version": "v3.2.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/sanctum.git", + "reference": "d09d69bac55708fcd4a3b305d760e673d888baf9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sanctum/zipball/d09d69bac55708fcd4a3b305d760e673d888baf9", + "reference": "d09d69bac55708fcd4a3b305d760e673d888baf9", + "shasum": "" + }, + "require": { + "ext-json": "*", + "illuminate/console": "^9.21|^10.0", + "illuminate/contracts": "^9.21|^10.0", + "illuminate/database": "^9.21|^10.0", + "illuminate/support": "^9.21|^10.0", + "php": "^8.0.2" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "orchestra/testbench": "^7.0|^8.0", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Sanctum\\SanctumServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Sanctum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Laravel Sanctum provides a featherweight authentication system for SPAs and simple APIs.", + "keywords": [ + "auth", + "laravel", + "sanctum" + ], + "support": { + "issues": "https://github.com/laravel/sanctum/issues", + "source": "https://github.com/laravel/sanctum" + }, + "time": "2023-01-13T15:41:49+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "f23fe9d4e95255dacee1bf3525e0810d1a1b0f37" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/f23fe9d4e95255dacee1bf3525e0810d1a1b0f37", + "reference": "f23fe9d4e95255dacee1bf3525e0810d1a1b0f37", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "nesbot/carbon": "^2.61", + "pestphp/pest": "^1.21.3", + "phpstan/phpstan": "^1.8.2", + "symfony/var-dumper": "^5.4.11" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\SerializableClosure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "nuno@laravel.com" + } + ], + "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", + "keywords": [ + "closure", + "laravel", + "serializable" + ], + "support": { + "issues": "https://github.com/laravel/serializable-closure/issues", + "source": "https://github.com/laravel/serializable-closure" + }, + "time": "2023-01-30T18:31:20+00:00" + }, + { + "name": "laravel/tinker", + "version": "v2.8.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/tinker.git", + "reference": "04a2d3bd0d650c0764f70bf49d1ee39393e4eb10" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/tinker/zipball/04a2d3bd0d650c0764f70bf49d1ee39393e4eb10", + "reference": "04a2d3bd0d650c0764f70bf49d1ee39393e4eb10", + "shasum": "" + }, + "require": { + "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0", + "php": "^7.2.5|^8.0", + "psy/psysh": "^0.10.4|^0.11.1", + "symfony/var-dumper": "^4.3.4|^5.0|^6.0" + }, + "require-dev": { + "mockery/mockery": "~1.3.3|^1.4.2", + "phpunit/phpunit": "^8.5.8|^9.3.3" + }, + "suggest": { + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Tinker\\TinkerServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Tinker\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Powerful REPL for the Laravel framework.", + "keywords": [ + "REPL", + "Tinker", + "laravel", + "psysh" + ], + "support": { + "issues": "https://github.com/laravel/tinker/issues", + "source": "https://github.com/laravel/tinker/tree/v2.8.1" + }, + "time": "2023-02-15T16:40:09+00:00" + }, + { + "name": "league/commonmark", + "version": "2.3.9", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "c1e114f74e518daca2729ea8c4bf1167038fa4b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/c1e114f74e518daca2729ea8c4bf1167038fa4b5", + "reference": "c1e114f74e518daca2729ea8c4bf1167038fa4b5", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.30.0", + "commonmark/commonmark.js": "0.30.0", + "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", + "erusev/parsedown": "^1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "^1.4 || ^2.0", + "nyholm/psr7": "^1.5", + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.21", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0", + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0 || ^5.0.0" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.4-dev" + } + }, + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", + "keywords": [ + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" + ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "forum": "https://github.com/thephpleague/commonmark/discussions", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2023-02-15T14:07:24+00:00" + }, + { + "name": "league/config", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/config.git", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", + "keywords": [ + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + } + ], + "time": "2022-12-11T20:36:23+00:00" + }, + { + "name": "league/flysystem", + "version": "3.12.3", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "81e87e74dd5213795c7846d65089712d2dda90ce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/81e87e74dd5213795c7846d65089712d2dda90ce", + "reference": "81e87e74dd5213795c7846d65089712d2dda90ce", + "shasum": "" + }, + "require": { + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "conflict": { + "aws/aws-sdk-php": "3.209.31 || 3.210.0", + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1", + "phpseclib/phpseclib": "3.0.15", + "symfony/http-client": "<5.2" + }, + "require-dev": { + "async-aws/s3": "^1.5", + "async-aws/simple-s3": "^1.1", + "aws/aws-sdk-php": "^3.220.0", + "composer/semver": "^3.0", + "ext-fileinfo": "*", + "ext-ftp": "*", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.5", + "google/cloud-storage": "^1.23", + "microsoft/azure-storage-blob": "^1.1", + "phpseclib/phpseclib": "^3.0.14", + "phpstan/phpstan": "^0.12.26", + "phpunit/phpunit": "^9.5.11", + "sabre/dav": "^4.3.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "File storage abstraction for PHP", + "keywords": [ + "WebDAV", + "aws", + "cloud", + "file", + "files", + "filesystem", + "filesystems", + "ftp", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/3.12.3" + }, + "funding": [ + { + "url": "https://ecologi.com/frankdejonge", + "type": "custom" + }, + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2023-02-18T15:32:41+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ff6248ea87a9f116e78edd6002e39e5128a0d4dd", + "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\MimeTypeDetection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Mime-type detection for Flysystem", + "support": { + "issues": "https://github.com/thephpleague/mime-type-detection/issues", + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.11.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2022-04-17T13:12:02+00:00" + }, + { + "name": "maximebf/debugbar", + "version": "v1.18.2", + "source": { + "type": "git", + "url": "https://github.com/maximebf/php-debugbar.git", + "reference": "17dcf3f6ed112bb85a37cf13538fd8de49f5c274" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/17dcf3f6ed112bb85a37cf13538fd8de49f5c274", + "reference": "17dcf3f6ed112bb85a37cf13538fd8de49f5c274", + "shasum": "" + }, + "require": { + "php": "^7.1|^8", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^4|^5|^6" + }, + "require-dev": { + "phpunit/phpunit": ">=7.5.20 <10.0", + "twig/twig": "^1.38|^2.7|^3.0" + }, + "suggest": { + "kriswallsmith/assetic": "The best way to manage assets", + "monolog/monolog": "Log using Monolog", + "predis/predis": "Redis storage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + } + }, + "autoload": { + "psr-4": { + "DebugBar\\": "src/DebugBar/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Maxime Bouroumeau-Fuseau", + "email": "maxime.bouroumeau@gmail.com", + "homepage": "http://maximebf.com" + }, + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "Debug bar in the browser for php application", + "homepage": "https://github.com/maximebf/php-debugbar", + "keywords": [ + "debug", + "debugbar" + ], + "support": { + "issues": "https://github.com/maximebf/php-debugbar/issues", + "source": "https://github.com/maximebf/php-debugbar/tree/v1.18.2" + }, + "time": "2023-02-04T15:27:00+00:00" + }, + { + "name": "monolog/monolog", + "version": "3.3.1", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "9b5daeaffce5b926cac47923798bba91059e60e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/9b5daeaffce5b926cac47923798bba91059e60e2", + "reference": "9b5daeaffce5b926cac47923798bba91059e60e2", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2@dev", + "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-strict-rules": "^1.4", + "phpunit/phpunit": "^9.5.26", + "predis/predis": "^1.1 || ^2", + "ruflin/elastica": "^7", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/3.3.1" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2023-02-06T13:46:10+00:00" + }, + { + "name": "nesbot/carbon", + "version": "2.66.0", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "496712849902241f04902033b0441b269effe001" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/496712849902241f04902033b0441b269effe001", + "reference": "496712849902241f04902033b0441b269effe001", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.1.8 || ^8.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" + }, + "require-dev": { + "doctrine/dbal": "^2.0 || ^3.1.4", + "doctrine/orm": "^2.7", + "friendsofphp/php-cs-fixer": "^3.0", + "kylekatarnls/multi-tester": "^2.0", + "ondrejmirtes/better-reflection": "*", + "phpmd/phpmd": "^2.9", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.99 || ^1.7.14", + "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6", + "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", + "squizlabs/php_codesniffer": "^3.4" + }, + "bin": [ + "bin/carbon" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-3.x": "3.x-dev", + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "https://markido.com" + }, + { + "name": "kylekatarnls", + "homepage": "https://github.com/kylekatarnls" + } + ], + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "https://carbon.nesbot.com", + "keywords": [ + "date", + "datetime", + "time" + ], + "support": { + "docs": "https://carbon.nesbot.com/docs", + "issues": "https://github.com/briannesbitt/Carbon/issues", + "source": "https://github.com/briannesbitt/Carbon" + }, + "funding": [ + { + "url": "https://github.com/sponsors/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon#sponsor", + "type": "opencollective" + }, + { + "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", + "type": "tidelift" + } + ], + "time": "2023-01-29T18:53:47+00:00" + }, + { + "name": "nette/schema", + "version": "v1.2.3", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/abbdbb70e0245d5f3bf77874cea1dfb0c930d06f", + "reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f", + "shasum": "" + }, + "require": { + "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", + "php": ">=7.1 <8.3" + }, + "require-dev": { + "nette/tester": "^2.3 || ^2.4", + "phpstan/phpstan-nette": "^1.0", + "tracy/tracy": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", + "keywords": [ + "config", + "nette" + ], + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.2.3" + }, + "time": "2022-10-13T01:24:26+00:00" + }, + { + "name": "nette/utils", + "version": "v4.0.0", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "cacdbf5a91a657ede665c541eda28941d4b09c1e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/cacdbf5a91a657ede665c541eda28941d4b09c1e", + "reference": "cacdbf5a91a657ede665c541eda28941d4b09c1e", + "shasum": "" + }, + "require": { + "php": ">=8.0 <8.3" + }, + "conflict": { + "nette/finder": "<3", + "nette/schema": "<1.2.2" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "dev-master", + "nette/tester": "^2.4", + "phpstan/phpstan": "^1.0", + "tracy/tracy": "^2.9" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()", + "ext-xml": "to use Strings::length() etc. when mbstring is not available" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v4.0.0" + }, + "time": "2023-02-02T10:41:53+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.15.4", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/6bb5176bc4af8bcb7d926f88718db9b96a2d4290", + "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.4" + }, + "time": "2023-03-05T19:49:14+00:00" + }, + { + "name": "nunomaduro/termwind", + "version": "v1.15.1", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/termwind.git", + "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/8ab0b32c8caa4a2e09700ea32925441385e4a5dc", + "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.0", + "symfony/console": "^5.3.0|^6.0.0" + }, + "require-dev": { + "ergebnis/phpstan-rules": "^1.0.", + "illuminate/console": "^8.0|^9.0", + "illuminate/support": "^8.0|^9.0", + "laravel/pint": "^1.0.0", + "pestphp/pest": "^1.21.0", + "pestphp/pest-plugin-mock": "^1.0", + "phpstan/phpstan": "^1.4.6", + "phpstan/phpstan-strict-rules": "^1.1.0", + "symfony/var-dumper": "^5.2.7|^6.0.0", + "thecodingmachine/phpstan-strict-rules": "^1.0.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Termwind\\Laravel\\TermwindServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/Functions.php" + ], + "psr-4": { + "Termwind\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Its like Tailwind CSS, but for the console.", + "keywords": [ + "cli", + "console", + "css", + "package", + "php", + "style" + ], + "support": { + "issues": "https://github.com/nunomaduro/termwind/issues", + "source": "https://github.com/nunomaduro/termwind/tree/v1.15.1" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://github.com/xiCO2k", + "type": "github" + } + ], + "time": "2023-02-08T01:06:31+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.9.1", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/dd3a383e599f49777d8b628dadbb90cae435b87e", + "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + }, + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.9.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2023-02-25T19:38:58+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client/tree/master" + }, + "time": "2020-06-29T06:28:15+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory/tree/master" + }, + "time": "2019-04-30T12:38:16+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/log", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.0" + }, + "time": "2021-07-14T16:46:02+00:00" + }, + { + "name": "psr/simple-cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + }, + "time": "2021-10-29T13:26:27+00:00" + }, + { + "name": "psy/psysh", + "version": "v0.11.12", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "52cb7c47d403c31c0adc9bf7710fc355f93c20f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/52cb7c47d403c31c0adc9bf7710fc355f93c20f7", + "reference": "52cb7c47d403c31c0adc9bf7710fc355f93c20f7", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "^4.0 || ^3.1", + "php": "^8.0 || ^7.0.8", + "symfony/console": "^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^6.0 || ^5.0 || ^4.0 || ^3.4" + }, + "conflict": { + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2" + }, + "suggest": { + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-pdo-sqlite": "The doc command requires SQLite to work.", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", + "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history." + }, + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.11.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Psy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "http://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "support": { + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.11.12" + }, + "time": "2023-01-29T21:24:40+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "ramsey/collection", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "captainhook/plugin-composer": "^5.3", + "ergebnis/composer-normalize": "^2.28.3", + "fakerphp/faker": "^1.21", + "hamcrest/hamcrest-php": "^2.0", + "jangregor/phpstan-prophecy": "^1.0", + "mockery/mockery": "^1.5", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpcsstandards/phpcsutils": "^1.0.0-rc1", + "phpspec/prophecy-phpunit": "^2.0", + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5", + "psalm/plugin-mockery": "^1.1", + "psalm/plugin-phpunit": "^0.18.4", + "ramsey/coding-standard": "^2.0.3", + "ramsey/conventional-commits": "^1.3", + "vimeo/psalm": "^5.4" + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + }, + "ramsey/conventional-commits": { + "configFile": "conventional-commits.json" + } + }, + "autoload": { + "psr-4": { + "Ramsey\\Collection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A PHP library for representing and manipulating collections.", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "support": { + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", + "type": "tidelift" + } + ], + "time": "2022-12-31T21:50:55+00:00" + }, + { + "name": "ramsey/uuid", + "version": "4.7.3", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "433b2014e3979047db08a17a205f410ba3869cf2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/433b2014e3979047db08a17a205f410ba3869cf2", + "reference": "433b2014e3979047db08a17a205f410ba3869cf2", + "shasum": "" + }, + "require": { + "brick/math": "^0.8.8 || ^0.9 || ^0.10", + "ext-json": "*", + "php": "^8.0", + "ramsey/collection": "^1.2 || ^2.0" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "captainhook/captainhook": "^5.10", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "doctrine/annotations": "^1.8", + "ergebnis/composer-normalize": "^2.15", + "mockery/mockery": "^1.3", + "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.2", + "php-mock/php-mock-mockery": "^1.3", + "php-parallel-lint/php-parallel-lint": "^1.1", + "phpbench/phpbench": "^1.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^8.5 || ^9", + "ramsey/composer-repl": "^1.4", + "slevomat/coding-standard": "^8.4", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.9" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "source": "https://github.com/ramsey/uuid/tree/4.7.3" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", + "type": "tidelift" + } + ], + "time": "2023-01-12T18:13:24+00:00" + }, + { + "name": "rhilip/bencode", + "version": "v2.3.2", + "source": { + "type": "git", + "url": "https://github.com/Rhilip/Bencode.git", + "reference": "e6b90a062b8d6f4f44aeb4da4c2bc35de19dba1f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Rhilip/Bencode/zipball/e6b90a062b8d6f4f44aeb4da4c2bc35de19dba1f", + "reference": "e6b90a062b8d6f4f44aeb4da4c2bc35de19dba1f", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "suggest": { + "php-64bit": "Running 64 bit is recommended to prevent integer overflow" + }, + "type": "library", + "autoload": { + "psr-4": { + "Rhilip\\Bencode\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Rhilip", + "email": "rhilipruan@gmail.com" + } + ], + "description": "A pure and simple PHP library for encoding and decoding Bencode data", + "keywords": [ + "bencode", + "bittorrent", + "torrent" + ], + "support": { + "issues": "https://github.com/Rhilip/Bencode/issues", + "source": "https://github.com/Rhilip/Bencode/tree/v2.3.2" + }, + "time": "2022-11-01T10:28:34+00:00" + }, + { + "name": "symfony/console", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "cbad09eb8925b6ad4fb721c7a179344dc4a19d45" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/cbad09eb8925b6ad4fb721c7a179344dc4a19d45", + "reference": "cbad09eb8925b6ad4fb721c7a179344dc4a19d45", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.4|^6.0" + }, + "conflict": { + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/lock": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v6.2.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-25T17:00:03+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "aedf3cb0f5b929ec255d96bbb4909e9932c769e0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/aedf3cb0f5b929ec255d96bbb4909e9932c769e0", + "reference": "aedf3cb0f5b929ec255d96bbb4909e9932c769e0", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v6.2.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-14T08:44:56+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e", + "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-03-01T10:25:55+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "61e90f94eb014054000bc902257d2763fac09166" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/61e90f94eb014054000bc902257d2763fac09166", + "reference": "61e90f94eb014054000bc902257d2763fac09166", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^5.4|^6.0" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v6.2.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-14T08:44:56+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "404b307de426c1c488e5afad64403e5f145e82a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/404b307de426c1c488e5afad64403e5f145e82a5", + "reference": "404b307de426c1c488e5afad64403e5f145e82a5", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/event-dispatcher-contracts": "^2|^3" + }, + "conflict": { + "symfony/dependency-injection": "<5.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/error-handler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^5.4|^6.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v6.2.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-14T08:44:56+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "0ad3b6f1e4e2da5690fefe075cd53a238646d8dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0ad3b6f1e4e2da5690fefe075cd53a238646d8dd", + "reference": "0ad3b6f1e4e2da5690fefe075cd53a238646d8dd", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-03-01T10:32:47+00:00" + }, + { + "name": "symfony/finder", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "20808dc6631aecafbe67c186af5dcb370be3a0eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/20808dc6631aecafbe67c186af5dcb370be3a0eb", + "reference": "20808dc6631aecafbe67c186af5dcb370be3a0eb", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v6.2.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-16T09:57:23+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "5fc3038d4a594223f9ea42e4e985548f3fcc9a3b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5fc3038d4a594223f9ea42e4e985548f3fcc9a3b", + "reference": "5fc3038d4a594223f9ea42e4e985548f3fcc9a3b", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.1" + }, + "conflict": { + "symfony/cache": "<6.2" + }, + "require-dev": { + "predis/predis": "~1.0", + "symfony/cache": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", + "symfony/mime": "^5.4|^6.0", + "symfony/rate-limiter": "^5.2|^6.0" + }, + "suggest": { + "symfony/mime": "To use the file extension guesser" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v6.2.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-21T10:54:55+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "ca0680ad1e2d678536cc20e0ae33f9e4e5d2becd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ca0680ad1e2d678536cc20e0ae33f9e4e5d2becd", + "reference": "ca0680ad1e2d678536cc20e0ae33f9e4e5d2becd", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/error-handler": "^6.1", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/http-foundation": "^5.4.21|^6.2.7", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/browser-kit": "<5.4", + "symfony/cache": "<5.4", + "symfony/config": "<6.1", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<6.2", + "symfony/doctrine-bridge": "<5.4", + "symfony/form": "<5.4", + "symfony/http-client": "<5.4", + "symfony/mailer": "<5.4", + "symfony/messenger": "<5.4", + "symfony/translation": "<5.4", + "symfony/twig-bridge": "<5.4", + "symfony/validator": "<5.4", + "twig/twig": "<2.13" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^5.4|^6.0", + "symfony/config": "^6.1", + "symfony/console": "^5.4|^6.0", + "symfony/css-selector": "^5.4|^6.0", + "symfony/dependency-injection": "^6.2", + "symfony/dom-crawler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/process": "^5.4|^6.0", + "symfony/routing": "^5.4|^6.0", + "symfony/stopwatch": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/translation-contracts": "^1.1|^2|^3", + "symfony/uid": "^5.4|^6.0", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v6.2.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-28T13:26:41+00:00" + }, + { + "name": "symfony/mailer", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "e4f84c633b72ec70efc50b8016871c3bc43e691e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/e4f84c633b72ec70efc50b8016871c3bc43e691e", + "reference": "e4f84c633b72ec70efc50b8016871c3bc43e691e", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.1.10|^3|^4", + "php": ">=8.1", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/mime": "^6.2", + "symfony/service-contracts": "^1.1|^2|^3" + }, + "conflict": { + "symfony/http-kernel": "<5.4", + "symfony/messenger": "<6.2", + "symfony/mime": "<6.2", + "symfony/twig-bridge": "<6.2.1" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/messenger": "^6.2", + "symfony/twig-bridge": "^6.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mailer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps sending emails", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/mailer/tree/v6.2.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-21T10:35:38+00:00" + }, + { + "name": "symfony/mime", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "62e341f80699badb0ad70b31149c8df89a2d778e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/62e341f80699badb0ad70b31149c8df89a2d778e", + "reference": "62e341f80699badb0ad70b31149c8df89a2d778e", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<5.4", + "symfony/serializer": "<6.2" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1|^4", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/property-access": "^5.4|^6.0", + "symfony/property-info": "^5.4|^6.0", + "symfony/serializer": "^6.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v6.2.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-24T10:42:00+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "639084e360537a19f9ee352433b84ce831f3d2da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da", + "reference": "639084e360537a19f9ee352433b84ce831f3d2da", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97", + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-uuid", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "f3cf1a645c2734236ed1e2e671e273eeb3586166" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/f3cf1a645c2734236ed1e2e671e273eeb3586166", + "reference": "f3cf1a645c2734236ed1e2e671e273eeb3586166", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-uuid": "*" + }, + "suggest": { + "ext-uuid": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Uuid\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for uuid functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/process", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "680e8a2ea6b3f87aecc07a6a65a203ae573d1902" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/680e8a2ea6b3f87aecc07a6a65a203ae573d1902", + "reference": "680e8a2ea6b3f87aecc07a6a65a203ae573d1902", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v6.2.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-24T10:42:00+00:00" + }, + { + "name": "symfony/routing", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "fa643fa4c56de161f8bc8c0492a76a60140b50e4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/fa643fa4c56de161f8bc8c0492a76a60140b50e4", + "reference": "fa643fa4c56de161f8bc8c0492a76a60140b50e4", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "conflict": { + "doctrine/annotations": "<1.12", + "symfony/config": "<6.2", + "symfony/dependency-injection": "<5.4", + "symfony/yaml": "<5.4" + }, + "require-dev": { + "doctrine/annotations": "^1.12|^2", + "psr/log": "^1|^2|^3", + "symfony/config": "^6.2", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" + }, + "suggest": { + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v6.2.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-14T08:53:37+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "a8c9cedf55f314f3a186041d19537303766df09a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/a8c9cedf55f314f3a186041d19537303766df09a", + "reference": "a8c9cedf55f314f3a186041d19537303766df09a", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^2.0" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-03-01T10:32:47+00:00" + }, + { + "name": "symfony/string", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "67b8c1eec78296b85dc1c7d9743830160218993d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/67b8c1eec78296b85dc1c7d9743830160218993d", + "reference": "67b8c1eec78296b85dc1c7d9743830160218993d", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.0" + }, + "require-dev": { + "symfony/error-handler": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/intl": "^6.2", + "symfony/translation-contracts": "^2.0|^3.0", + "symfony/var-exporter": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v6.2.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-24T10:42:00+00:00" + }, + { + "name": "symfony/translation", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "90db1c6138c90527917671cd9ffa9e8b359e3a73" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/90db1c6138c90527917671cd9ffa9e8b359e3a73", + "reference": "90db1c6138c90527917671cd9ffa9e8b359e3a73", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.3|^3.0" + }, + "conflict": { + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/twig-bundle": "<5.4", + "symfony/yaml": "<5.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "nikic/php-parser": "^4.13", + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client-contracts": "^1.1|^2.0|^3.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/intl": "^5.4|^6.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^5.4|^6.0", + "symfony/service-contracts": "^1.1.2|^2|^3", + "symfony/yaml": "^5.4|^6.0" + }, + "suggest": { + "nikic/php-parser": "To use PhpAstExtractor", + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v6.2.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-24T10:42:00+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "dfec258b9dd17a6b24420d464c43bffe347441c8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/dfec258b9dd17a6b24420d464c43bffe347441c8", + "reference": "dfec258b9dd17a6b24420d464c43bffe347441c8", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-03-01T10:32:47+00:00" + }, + { + "name": "symfony/uid", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/uid.git", + "reference": "d30c72a63897cfa043e1de4d4dd2ffa9ecefcdc0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/uid/zipball/d30c72a63897cfa043e1de4d4dd2ffa9ecefcdc0", + "reference": "d30c72a63897cfa043e1de4d4dd2ffa9ecefcdc0", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-uuid": "^1.15" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Uid\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to generate and represent UIDs", + "homepage": "https://symfony.com", + "keywords": [ + "UID", + "ulid", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/uid/tree/v6.2.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-14T08:44:56+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "cf8d4ca1ddc1e3cc242375deb8fc23e54f5e2a1e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/cf8d4ca1ddc1e3cc242375deb8fc23e54f5e2a1e", + "reference": "cf8d4ca1ddc1e3cc242375deb8fc23e54f5e2a1e", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "phpunit/phpunit": "<5.4.3", + "symfony/console": "<5.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/uid": "^5.4|^6.0", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v6.2.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-24T10:42:00+00:00" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "2.2.6", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/c42125b83a4fa63b187fdf29f9c93cb7733da30c", + "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^5.5 || ^7.0 || ^8.0", + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "TijsVerkoyen\\CssToInlineStyles\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Tijs Verkoyen", + "email": "css_to_inline_styles@verkoyen.eu", + "role": "Developer" + } + ], + "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", + "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.6" + }, + "time": "2023-01-03T09:29:04+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v5.5.0", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", + "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "graham-campbell/result-type": "^1.0.2", + "php": "^7.1.3 || ^8.0", + "phpoption/phpoption": "^1.8", + "symfony/polyfill-ctype": "^1.23", + "symfony/polyfill-mbstring": "^1.23.1", + "symfony/polyfill-php80": "^1.23.1" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-filter": "*", + "phpunit/phpunit": "^7.5.20 || ^8.5.30 || ^9.5.25" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + }, + "branch-alias": { + "dev-master": "5.5-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://github.com/vlucas" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.5.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2022-10-16T01:01:54+00:00" + }, + { + "name": "voku/portable-ascii", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "b56450eed252f6801410d810c8e1727224ae0743" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", + "reference": "b56450eed252f6801410d810c8e1727224ae0743", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" + }, + "type": "library", + "autoload": { + "psr-4": { + "voku\\": "src/voku/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lars Moelleken", + "homepage": "http://www.moelleken.org/" + } + ], + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", + "keywords": [ + "ascii", + "clean", + "php" + ], + "support": { + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/2.0.1" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], + "time": "2022-03-08T17:03:00+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "time": "2022-06-03T18:03:27+00:00" + } + ], + "packages-dev": [ + { + "name": "fakerphp/faker", + "version": "v1.21.0", + "source": { + "type": "git", + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "92efad6a967f0b79c499705c69b662f738cc9e4d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/92efad6a967f0b79c499705c69b662f738cc9e4d", + "reference": "92efad6a967f0b79c499705c69b662f738cc9e4d", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "psr/container": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "conflict": { + "fzaninotto/faker": "*" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "doctrine/persistence": "^1.3 || ^2.0", + "ext-intl": "*", + "phpunit/phpunit": "^9.5.26", + "symfony/phpunit-bridge": "^5.4.16" + }, + "suggest": { + "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", + "ext-curl": "Required by Faker\\Provider\\Image to download images.", + "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", + "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", + "ext-mbstring": "Required for multibyte Unicode string functionality." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "v1.21-dev" + } + }, + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "support": { + "issues": "https://github.com/FakerPHP/Faker/issues", + "source": "https://github.com/FakerPHP/Faker/tree/v1.21.0" + }, + "time": "2022-12-13T13:54:32+00:00" + }, + { + "name": "filp/whoops", + "version": "2.15.1", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "e864ac957acd66e1565f25efda61e37791a5db0b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/e864ac957acd66e1565f25efda61e37791a5db0b", + "reference": "e864ac957acd66e1565f25efda61e37791a5db0b", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "require-dev": { + "mockery/mockery": "^0.9 || ^1.0", + "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], + "support": { + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.15.1" + }, + "funding": [ + { + "url": "https://github.com/denis-sokolov", + "type": "github" + } + ], + "time": "2023-03-06T18:09:13+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "shasum": "" + }, + "require": { + "php": "^5.3|^7.0|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + }, + "time": "2020-07-09T08:09:16+00:00" + }, + { + "name": "laravel/sail", + "version": "v1.21.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/sail.git", + "reference": "19d6fe167e2389b41fe1b4ee52293d1eaf8a43fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sail/zipball/19d6fe167e2389b41fe1b4ee52293d1eaf8a43fc", + "reference": "19d6fe167e2389b41fe1b4ee52293d1eaf8a43fc", + "shasum": "" + }, + "require": { + "illuminate/console": "^8.0|^9.0|^10.0", + "illuminate/contracts": "^8.0|^9.0|^10.0", + "illuminate/support": "^8.0|^9.0|^10.0", + "php": "^7.3|^8.0", + "symfony/yaml": "^6.0" + }, + "require-dev": { + "orchestra/testbench": "^6.0|^7.0|^8.0", + "phpstan/phpstan": "^1.10" + }, + "bin": [ + "bin/sail" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Sail\\SailServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Sail\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Docker files for running a basic Laravel application.", + "keywords": [ + "docker", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/sail/issues", + "source": "https://github.com/laravel/sail" + }, + "time": "2023-03-06T14:23:15+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.5.1", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "e92dcc83d5a51851baf5f5591d32cb2b16e3684e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/e92dcc83d5a51851baf5f5591d32cb2b16e3684e", + "reference": "e92dcc83d5a51851baf5f5591d32cb2b16e3684e", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": "^7.3 || ^8.0" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "psr-0": { + "Mockery": "library/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "http://blog.astrumfutura.com" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "http://davedevelopment.co.uk" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "issues": "https://github.com/mockery/mockery/issues", + "source": "https://github.com/mockery/mockery/tree/1.5.1" + }, + "time": "2022-09-07T15:32:08+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.11.1", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2023-03-08T13:26:56+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v7.1.0", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "2b97fed4950cf0ff148c18b853975ec8ea135e90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/2b97fed4950cf0ff148c18b853975ec8ea135e90", + "reference": "2b97fed4950cf0ff148c18b853975ec8ea135e90", + "shasum": "" + }, + "require": { + "filp/whoops": "^2.14.6", + "nunomaduro/termwind": "^1.15.1", + "php": "^8.1.0", + "symfony/console": "^6.2.7" + }, + "require-dev": { + "brianium/paratest": "^7.1.0", + "laravel/framework": "^10.2.0", + "laravel/pint": "^1.6.0", + "laravel/sail": "^1.21.1", + "laravel/sanctum": "^3.2.1", + "laravel/tinker": "^2.8.1", + "nunomaduro/larastan": "^2.4.1", + "orchestra/testbench-core": "^8.0.3", + "pestphp/pest": "^2.0.0", + "phpunit/phpunit": "^10.0.14", + "sebastian/environment": "^6.0.0", + "spatie/laravel-ignition": "^2.0.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "./src/Adapters/Phpunit/Autoload.php" + ], + "psr-4": { + "NunoMaduro\\Collision\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Cli error handling for console/command-line PHP applications.", + "keywords": [ + "artisan", + "cli", + "command-line", + "console", + "error", + "handling", + "laravel", + "laravel-zero", + "php", + "symfony" + ], + "support": { + "issues": "https://github.com/nunomaduro/collision/issues", + "source": "https://github.com/nunomaduro/collision" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2023-03-03T10:00:22+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.3" + }, + "time": "2021-07-20T11:28:43+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "10.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "20800e84296ea4732f9a125e08ce86b4004ae3e4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/20800e84296ea4732f9a125e08ce86b4004ae3e4", + "reference": "20800e84296ea4732f9a125e08ce86b4004ae3e4", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.15", + "php": ">=8.1", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-text-template": "^3.0", + "sebastian/code-unit-reverse-lookup": "^3.0", + "sebastian/complexity": "^3.0", + "sebastian/environment": "^6.0", + "sebastian/lines-of-code": "^2.0", + "sebastian/version": "^4.0", + "theseer/tokenizer": "^1.2.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "10.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-03-06T13:00:19+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "fd9329ab3368f59fe1fe808a189c51086bd4b6bd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/fd9329ab3368f59fe1fe808a189c51086bd4b6bd", + "reference": "fd9329ab3368f59fe1fe808a189c51086bd4b6bd", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-10T16:53:14+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:56:09+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "9f3d3709577a527025f55bcf0f7ab8052c8bb37d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/9f3d3709577a527025f55bcf0f7ab8052c8bb37d", + "reference": "9f3d3709577a527025f55bcf0f7ab8052c8bb37d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:56:46+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:57:52+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "10.0.15", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "9b0c2245ef173a3d9546f6a4393a85d60eabe071" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9b0c2245ef173a3d9546f6a4393a85d60eabe071", + "reference": "9b0c2245ef173a3d9546f6a4393a85d60eabe071", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=8.1", + "phpunit/php-code-coverage": "^10.0", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-invoker": "^4.0", + "phpunit/php-text-template": "^3.0", + "phpunit/php-timer": "^6.0", + "sebastian/cli-parser": "^2.0", + "sebastian/code-unit": "^2.0", + "sebastian/comparator": "^5.0", + "sebastian/diff": "^5.0", + "sebastian/environment": "^6.0", + "sebastian/exporter": "^5.0", + "sebastian/global-state": "^6.0", + "sebastian/object-enumerator": "^5.0", + "sebastian/recursion-context": "^5.0", + "sebastian/type": "^4.0", + "sebastian/version": "^4.0" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "10.0-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.0.15" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2023-03-09T06:43:13+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/efdc130dbbbb8ef0b545a994fd811725c5282cae", + "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:58:15+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:58:43+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:59:15+00:00" + }, + { + "name": "sebastian/comparator", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "72f01e6586e0caf6af81297897bd112eb7e9627c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/72f01e6586e0caf6af81297897bd112eb7e9627c", + "reference": "72f01e6586e0caf6af81297897bd112eb7e9627c", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/diff": "^5.0", + "sebastian/exporter": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:07:16+00:00" + }, + { + "name": "sebastian/complexity", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "e67d240970c9dc7ea7b2123a6d520e334dd61dc6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/e67d240970c9dc7ea7b2123a6d520e334dd61dc6", + "reference": "e67d240970c9dc7ea7b2123a6d520e334dd61dc6", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.10", + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:59:47+00:00" + }, + { + "name": "sebastian/diff", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "70dd1b20bc198da394ad542e988381b44e64e39f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/70dd1b20bc198da394ad542e988381b44e64e39f", + "reference": "70dd1b20bc198da394ad542e988381b44e64e39f", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:00:31+00:00" + }, + { + "name": "sebastian/environment", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "b6f3694c6386c7959915a0037652e0c40f6f69cc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/b6f3694c6386c7959915a0037652e0c40f6f69cc", + "reference": "b6f3694c6386c7959915a0037652e0c40f6f69cc", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "https://github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:03:04+00:00" + }, + { + "name": "sebastian/exporter", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "f3ec4bf931c0b31e5b413f5b4fc970a7d03338c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/f3ec4bf931c0b31e5b413f5b4fc970a7d03338c0", + "reference": "f3ec4bf931c0b31e5b413f5b4fc970a7d03338c0", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:06:49+00:00" + }, + { + "name": "sebastian/global-state", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "aab257c712de87b90194febd52e4d184551c2d44" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/aab257c712de87b90194febd52e4d184551c2d44", + "reference": "aab257c712de87b90194febd52e4d184551c2d44", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:07:38+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "17c4d940ecafb3d15d2cf916f4108f664e28b130" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/17c4d940ecafb3d15d2cf916f4108f664e28b130", + "reference": "17c4d940ecafb3d15d2cf916f4108f664e28b130", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.10", + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:08:02+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:08:32+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:06:18+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:05:40+00:00" + }, + { + "name": "sebastian/type", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:10:45+00:00" + }, + { + "name": "sebastian/version", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-07T11:34:05+00:00" + }, + { + "name": "spatie/backtrace", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/backtrace.git", + "reference": "ec4dd16476b802dbdc6b4467f84032837e316b8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/backtrace/zipball/ec4dd16476b802dbdc6b4467f84032837e316b8c", + "reference": "ec4dd16476b802dbdc6b4467f84032837e316b8c", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "ext-json": "*", + "phpunit/phpunit": "^9.3", + "spatie/phpunit-snapshot-assertions": "^4.2", + "symfony/var-dumper": "^5.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Backtrace\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van de Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "A better backtrace", + "homepage": "https://github.com/spatie/backtrace", + "keywords": [ + "Backtrace", + "spatie" + ], + "support": { + "source": "https://github.com/spatie/backtrace/tree/1.4.0" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spatie", + "type": "github" + }, + { + "url": "https://spatie.be/open-source/support-us", + "type": "other" + } + ], + "time": "2023-03-04T08:57:24+00:00" + }, + { + "name": "spatie/flare-client-php", + "version": "1.3.5", + "source": { + "type": "git", + "url": "https://github.com/spatie/flare-client-php.git", + "reference": "3e5dd5ac4928f3d2d036bd02de5eb83fd0ef1f42" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/3e5dd5ac4928f3d2d036bd02de5eb83fd0ef1f42", + "reference": "3e5dd5ac4928f3d2d036bd02de5eb83fd0ef1f42", + "shasum": "" + }, + "require": { + "illuminate/pipeline": "^8.0|^9.0|^10.0", + "php": "^8.0", + "spatie/backtrace": "^1.2", + "symfony/http-foundation": "^5.0|^6.0", + "symfony/mime": "^5.2|^6.0", + "symfony/process": "^5.2|^6.0", + "symfony/var-dumper": "^5.2|^6.0" + }, + "require-dev": { + "dms/phpunit-arraysubset-asserts": "^0.3.0", + "pestphp/pest": "^1.20", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "spatie/phpunit-snapshot-assertions": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.1.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Spatie\\FlareClient\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Send PHP errors to Flare", + "homepage": "https://github.com/spatie/flare-client-php", + "keywords": [ + "exception", + "flare", + "reporting", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/flare-client-php/issues", + "source": "https://github.com/spatie/flare-client-php/tree/1.3.5" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2023-01-23T15:58:46+00:00" + }, + { + "name": "spatie/ignition", + "version": "1.4.5", + "source": { + "type": "git", + "url": "https://github.com/spatie/ignition.git", + "reference": "cc09114b7057bd217b676f047544b33f5b6247e6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/ignition/zipball/cc09114b7057bd217b676f047544b33f5b6247e6", + "reference": "cc09114b7057bd217b676f047544b33f5b6247e6", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "php": "^8.0", + "spatie/flare-client-php": "^1.1", + "symfony/console": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" + }, + "require-dev": { + "mockery/mockery": "^1.4", + "pestphp/pest": "^1.20", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "symfony/process": "^5.4|^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.4.x-dev" + } + }, + "autoload": { + "psr-4": { + "Spatie\\Ignition\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Spatie", + "email": "info@spatie.be", + "role": "Developer" + } + ], + "description": "A beautiful error page for PHP applications.", + "homepage": "https://flareapp.io/ignition", + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], + "support": { + "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", + "forum": "https://twitter.com/flareappio", + "issues": "https://github.com/spatie/ignition/issues", + "source": "https://github.com/spatie/ignition" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2023-02-28T16:49:47+00:00" + }, + { + "name": "spatie/laravel-ignition", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-ignition.git", + "reference": "70c0e2a22c5c4b691a34db8c98bd6d695660a97a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/70c0e2a22c5c4b691a34db8c98bd6d695660a97a", + "reference": "70c0e2a22c5c4b691a34db8c98bd6d695660a97a", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "illuminate/support": "^10.0", + "php": "^8.1", + "spatie/flare-client-php": "^1.3.5", + "spatie/ignition": "^1.4.3", + "symfony/console": "^6.2.3", + "symfony/var-dumper": "^6.2.3" + }, + "require-dev": { + "livewire/livewire": "^2.11", + "mockery/mockery": "^1.5.1", + "orchestra/testbench": "^8.0", + "pestphp/pest": "^1.22.3", + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan-deprecation-rules": "^1.1.1", + "phpstan/phpstan-phpunit": "^1.3.3" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Spatie\\LaravelIgnition\\IgnitionServiceProvider" + ], + "aliases": { + "Flare": "Spatie\\LaravelIgnition\\Facades\\Flare" + } + }, + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Spatie\\LaravelIgnition\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Spatie", + "email": "info@spatie.be", + "role": "Developer" + } + ], + "description": "A beautiful error page for Laravel applications.", + "homepage": "https://flareapp.io/ignition", + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], + "support": { + "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", + "forum": "https://twitter.com/flareappio", + "issues": "https://github.com/spatie/laravel-ignition/issues", + "source": "https://github.com/spatie/laravel-ignition" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2023-01-24T07:20:39+00:00" + }, + { + "name": "symfony/yaml", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "e8e6a1d59e050525f27a1f530aa9703423cb7f57" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/e8e6a1d59e050525f27a1f530aa9703423cb7f57", + "reference": "e8e6a1d59e050525f27a1f530aa9703423cb7f57", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<5.4" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v6.2.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-16T09:57:23+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2021-07-28T10:34:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": "^8.0.2", + "ext-bcmath": "*" + }, + "platform-dev": [], + "plugin-api-version": "2.3.0" +} diff --git a/config/app.php b/config/app.php new file mode 100644 index 0000000..52896ba --- /dev/null +++ b/config/app.php @@ -0,0 +1,216 @@ + env('APP_NAME', 'Laravel'), + + /* + |-------------------------------------------------------------------------- + | Application Environment + |-------------------------------------------------------------------------- + | + | This value determines the "environment" your application is currently + | running in. This may determine how you prefer to configure various + | services the application utilizes. Set this in your ".env" file. + | + */ + + 'env' => env('APP_ENV', 'production'), + + /* + |-------------------------------------------------------------------------- + | Application Debug Mode + |-------------------------------------------------------------------------- + | + | When your application is in debug mode, detailed error messages with + | stack traces will be shown on every error that occurs within your + | application. If disabled, a simple generic error page is shown. + | + */ + + 'debug' => (bool) env('APP_DEBUG', false), + + /* + |-------------------------------------------------------------------------- + | Application URL + |-------------------------------------------------------------------------- + | + | This URL is used by the console to properly generate URLs when using + | the Artisan command line tool. You should set this to the root of + | your application so that it is used when running Artisan tasks. + | + */ + + 'url' => env('APP_URL', 'http://localhost'), + + 'asset_url' => env('ASSET_URL'), + + /* + |-------------------------------------------------------------------------- + | Application Timezone + |-------------------------------------------------------------------------- + | + | Here you may specify the default timezone for your application, which + | will be used by the PHP date and date-time functions. We have gone + | ahead and set this to a sensible default for you out of the box. + | + */ + + 'timezone' => 'Europe/Berlin', + + /* + |-------------------------------------------------------------------------- + | Application Locale Configuration + |-------------------------------------------------------------------------- + | + | The application locale determines the default locale that will be used + | by the translation service provider. You are free to set this value + | to any of the locales which will be supported by the application. + | + */ + + 'locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Application Fallback Locale + |-------------------------------------------------------------------------- + | + | The fallback locale determines the locale to use when the current one + | is not available. You may change the value to correspond to any of + | the language folders that are provided through your application. + | + */ + + 'fallback_locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Faker Locale + |-------------------------------------------------------------------------- + | + | This locale will be used by the Faker PHP library when generating fake + | data for your database seeds. For example, this will be used to get + | localized telephone numbers, street address information and more. + | + */ + + 'faker_locale' => 'en_US', + + /* + |-------------------------------------------------------------------------- + | Encryption Key + |-------------------------------------------------------------------------- + | + | This key is used by the Illuminate encrypter service and should be set + | to a random, 32 character string, otherwise these encrypted strings + | will not be safe. Please do this before deploying an application! + | + */ + + 'key' => env('APP_KEY'), + + 'cipher' => 'AES-256-CBC', + + /* + |-------------------------------------------------------------------------- + | Maintenance Mode Driver + |-------------------------------------------------------------------------- + | + | These configuration options determine the driver used to determine and + | manage Laravel's "maintenance mode" status. The "cache" driver will + | allow maintenance mode to be controlled across multiple machines. + | + | Supported drivers: "file", "cache" + | + */ + + 'maintenance' => [ + 'driver' => 'file', + // 'store' => 'redis', + ], + + /* + |-------------------------------------------------------------------------- + | Autoloaded Service Providers + |-------------------------------------------------------------------------- + | + | The service providers listed here will be automatically loaded on the + | request to your application. Feel free to add your own services to + | this array to grant expanded functionality to your applications. + | + */ + + 'providers' => [ + + /* + * Laravel Framework Service Providers... + */ + Illuminate\Auth\AuthServiceProvider::class, + Illuminate\Broadcasting\BroadcastServiceProvider::class, + Illuminate\Bus\BusServiceProvider::class, + Illuminate\Cache\CacheServiceProvider::class, + Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, + Illuminate\Cookie\CookieServiceProvider::class, + Illuminate\Database\DatabaseServiceProvider::class, + Illuminate\Encryption\EncryptionServiceProvider::class, + Illuminate\Filesystem\FilesystemServiceProvider::class, + Illuminate\Foundation\Providers\FoundationServiceProvider::class, + Illuminate\Hashing\HashServiceProvider::class, + Illuminate\Mail\MailServiceProvider::class, + Illuminate\Notifications\NotificationServiceProvider::class, + Illuminate\Pagination\PaginationServiceProvider::class, + Illuminate\Pipeline\PipelineServiceProvider::class, + Illuminate\Queue\QueueServiceProvider::class, + Illuminate\Redis\RedisServiceProvider::class, + Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, + Illuminate\Session\SessionServiceProvider::class, + Illuminate\Translation\TranslationServiceProvider::class, + Illuminate\Validation\ValidationServiceProvider::class, + Illuminate\View\ViewServiceProvider::class, + + /* + * Package Service Providers... + */ + + /* + * Application Service Providers... + */ + App\Providers\AppServiceProvider::class, + App\Providers\AuthServiceProvider::class, + // App\Providers\BroadcastServiceProvider::class, + App\Providers\EventServiceProvider::class, + App\Providers\RouteServiceProvider::class, + App\Providers\ModuleServiceProvider::class, + + ], + + /* + |-------------------------------------------------------------------------- + | Class Aliases + |-------------------------------------------------------------------------- + | + | This array of class aliases will be registered when this application + | is started. However, feel free to register as many as you wish as + | the aliases are "lazy" loaded so they don't hinder performance. + | + */ + + 'aliases' => Facade::defaultAliases()->merge([ + // 'ExampleClass' => App\Example\ExampleClass::class, + ])->toArray(), + +]; diff --git a/config/auth.php b/config/auth.php new file mode 100644 index 0000000..c4bcd7b --- /dev/null +++ b/config/auth.php @@ -0,0 +1,111 @@ + [ + 'guard' => 'web', + 'passwords' => 'users', + ], + + /* + |-------------------------------------------------------------------------- + | Authentication Guards + |-------------------------------------------------------------------------- + | + | Next, you may define every authentication guard for your application. + | Of course, a great default configuration has been defined for you + | here which uses session storage and the Eloquent user provider. + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | Supported: "session" + | + */ + + 'guards' => [ + 'web' => [ + 'driver' => 'session', + 'provider' => 'users', + ], + ], + + /* + |-------------------------------------------------------------------------- + | User Providers + |-------------------------------------------------------------------------- + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | If you have multiple user tables or models you may configure multiple + | sources which represent each model / table. These sources may then + | be assigned to any extra authentication guards you have defined. + | + | Supported: "database", "eloquent" + | + */ + + 'providers' => [ + 'users' => [ + 'driver' => 'eloquent', + 'model' => LaraBB\User\Models\User::class, + ], + + // 'users' => [ + // 'driver' => 'database', + // 'table' => 'users', + // ], + ], + + /* + |-------------------------------------------------------------------------- + | Resetting Passwords + |-------------------------------------------------------------------------- + | + | You may specify multiple password reset configurations if you have more + | than one user table or model in the application and you want to have + | separate password reset settings based on the specific user types. + | + | The expire time is the number of minutes that each reset token will be + | considered valid. This security feature keeps tokens short-lived so + | they have less time to be guessed. You may change this as needed. + | + */ + + 'passwords' => [ + 'users' => [ + 'provider' => 'users', + 'table' => 'password_resets', + 'expire' => 60, + 'throttle' => 60, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Password Confirmation Timeout + |-------------------------------------------------------------------------- + | + | Here you may define the amount of seconds before a password confirmation + | times out and the user is prompted to re-enter their password via the + | confirmation screen. By default, the timeout lasts for three hours. + | + */ + + 'password_timeout' => 10800, + +]; diff --git a/config/broadcasting.php b/config/broadcasting.php new file mode 100644 index 0000000..7cc9908 --- /dev/null +++ b/config/broadcasting.php @@ -0,0 +1,70 @@ + env('BROADCAST_DRIVER', 'null'), + + /* + |-------------------------------------------------------------------------- + | Broadcast Connections + |-------------------------------------------------------------------------- + | + | Here you may define all of the broadcast connections that will be used + | to broadcast events to other systems or over websockets. Samples of + | each available type of connection are provided inside this array. + | + */ + + 'connections' => [ + + 'pusher' => [ + 'driver' => 'pusher', + 'key' => env('PUSHER_APP_KEY'), + 'secret' => env('PUSHER_APP_SECRET'), + 'app_id' => env('PUSHER_APP_ID'), + 'options' => [ + 'host' => env('PUSHER_HOST', 'api-'.env('PUSHER_APP_CLUSTER', 'mt1').'.pusher.com'), + 'port' => env('PUSHER_PORT', 443), + 'scheme' => env('PUSHER_SCHEME', 'https'), + 'encrypted' => true, + 'useTLS' => env('PUSHER_SCHEME', 'https') === 'https', + ], + 'client_options' => [ + // Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html + ], + ], + + 'ably' => [ + 'driver' => 'ably', + 'key' => env('ABLY_KEY'), + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + ], + + 'log' => [ + 'driver' => 'log', + ], + + 'null' => [ + 'driver' => 'null', + ], + + ], + +]; diff --git a/config/cache.php b/config/cache.php new file mode 100644 index 0000000..33bb295 --- /dev/null +++ b/config/cache.php @@ -0,0 +1,110 @@ + env('CACHE_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Cache Stores + |-------------------------------------------------------------------------- + | + | Here you may define all of the cache "stores" for your application as + | well as their drivers. You may even define multiple stores for the + | same cache driver to group types of items stored in your caches. + | + | Supported drivers: "apc", "array", "database", "file", + | "memcached", "redis", "dynamodb", "octane", "null" + | + */ + + 'stores' => [ + + 'apc' => [ + 'driver' => 'apc', + ], + + 'array' => [ + 'driver' => 'array', + 'serialize' => false, + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'cache', + 'connection' => null, + 'lock_connection' => null, + ], + + 'file' => [ + 'driver' => 'file', + 'path' => storage_path('framework/cache/data'), + ], + + 'memcached' => [ + 'driver' => 'memcached', + 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), + 'sasl' => [ + env('MEMCACHED_USERNAME'), + env('MEMCACHED_PASSWORD'), + ], + 'options' => [ + // Memcached::OPT_CONNECT_TIMEOUT => 2000, + ], + 'servers' => [ + [ + 'host' => env('MEMCACHED_HOST', '127.0.0.1'), + 'port' => env('MEMCACHED_PORT', 11211), + 'weight' => 100, + ], + ], + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'cache', + 'lock_connection' => 'default', + ], + + 'dynamodb' => [ + 'driver' => 'dynamodb', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'), + 'endpoint' => env('DYNAMODB_ENDPOINT'), + ], + + 'octane' => [ + 'driver' => 'octane', + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Cache Key Prefix + |-------------------------------------------------------------------------- + | + | When utilizing the APC, database, memcached, Redis, or DynamoDB cache + | stores there might be other applications using the same cache. For + | that reason, you may prefix every cache key to avoid collisions. + | + */ + + 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache_'), + +]; diff --git a/config/cors.php b/config/cors.php new file mode 100644 index 0000000..8a39e6d --- /dev/null +++ b/config/cors.php @@ -0,0 +1,34 @@ + ['api/*', 'sanctum/csrf-cookie'], + + 'allowed_methods' => ['*'], + + 'allowed_origins' => ['*'], + + 'allowed_origins_patterns' => [], + + 'allowed_headers' => ['*'], + + 'exposed_headers' => [], + + 'max_age' => 0, + + 'supports_credentials' => false, + +]; diff --git a/config/database.php b/config/database.php new file mode 100644 index 0000000..137ad18 --- /dev/null +++ b/config/database.php @@ -0,0 +1,151 @@ + env('DB_CONNECTION', 'mysql'), + + /* + |-------------------------------------------------------------------------- + | Database Connections + |-------------------------------------------------------------------------- + | + | Here are each of the database connections setup for your application. + | Of course, examples of configuring each database platform that is + | supported by Laravel is shown below to make development simple. + | + | + | All database work in Laravel is done through the PHP PDO facilities + | so make sure you have the driver for your particular database of + | choice installed on your machine before you begin development. + | + */ + + 'connections' => [ + + 'sqlite' => [ + 'driver' => 'sqlite', + 'url' => env('DATABASE_URL'), + 'database' => env('DB_DATABASE', database_path('database.sqlite')), + 'prefix' => '', + 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), + ], + + 'mysql' => [ + 'driver' => 'mysql', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => 'utf8mb4', + 'collation' => 'utf8mb4_unicode_ci', + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'pgsql' => [ + 'driver' => 'pgsql', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '5432'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + 'prefix_indexes' => true, + 'search_path' => 'public', + 'sslmode' => 'prefer', + ], + + 'sqlsrv' => [ + 'driver' => 'sqlsrv', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', 'localhost'), + 'port' => env('DB_PORT', '1433'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + 'prefix_indexes' => true, + // 'encrypt' => env('DB_ENCRYPT', 'yes'), + // 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'), + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Migration Repository Table + |-------------------------------------------------------------------------- + | + | This table keeps track of all the migrations that have already run for + | your application. Using this information, we can determine which of + | the migrations on disk haven't actually been run in the database. + | + */ + + 'migrations' => 'migrations', + + /* + |-------------------------------------------------------------------------- + | Redis Databases + |-------------------------------------------------------------------------- + | + | Redis is an open source, fast, and advanced key-value store that also + | provides a richer body of commands than a typical key-value system + | such as APC or Memcached. Laravel makes it easy to dig right in. + | + */ + + 'redis' => [ + + 'client' => env('REDIS_CLIENT', 'phpredis'), + + 'options' => [ + 'cluster' => env('REDIS_CLUSTER', 'redis'), + 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'), + ], + + 'default' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'username' => env('REDIS_USERNAME'), + 'password' => env('REDIS_PASSWORD'), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_DB', '0'), + ], + + 'cache' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'username' => env('REDIS_USERNAME'), + 'password' => env('REDIS_PASSWORD'), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_CACHE_DB', '1'), + ], + + ], + +]; diff --git a/config/filesystems.php b/config/filesystems.php new file mode 100644 index 0000000..e9d9dbd --- /dev/null +++ b/config/filesystems.php @@ -0,0 +1,76 @@ + env('FILESYSTEM_DISK', 'local'), + + /* + |-------------------------------------------------------------------------- + | Filesystem Disks + |-------------------------------------------------------------------------- + | + | Here you may configure as many filesystem "disks" as you wish, and you + | may even configure multiple disks of the same driver. Defaults have + | been set up for each driver as an example of the required values. + | + | Supported Drivers: "local", "ftp", "sftp", "s3" + | + */ + + 'disks' => [ + + 'local' => [ + 'driver' => 'local', + 'root' => storage_path('app'), + 'throw' => false, + ], + + 'public' => [ + 'driver' => 'local', + 'root' => storage_path('app/public'), + 'url' => env('APP_URL').'/storage', + 'visibility' => 'public', + 'throw' => false, + ], + + 's3' => [ + 'driver' => 's3', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION'), + 'bucket' => env('AWS_BUCKET'), + 'url' => env('AWS_URL'), + 'endpoint' => env('AWS_ENDPOINT'), + 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), + 'throw' => false, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Symbolic Links + |-------------------------------------------------------------------------- + | + | Here you may configure the symbolic links that will be created when the + | `storage:link` Artisan command is executed. The array keys should be + | the locations of the links and the values should be their targets. + | + */ + + 'links' => [ + public_path('storage') => storage_path('app/public'), + ], + +]; diff --git a/config/hashing.php b/config/hashing.php new file mode 100644 index 0000000..bcd3be4 --- /dev/null +++ b/config/hashing.php @@ -0,0 +1,52 @@ + 'bcrypt', + + /* + |-------------------------------------------------------------------------- + | Bcrypt Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Bcrypt algorithm. This will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'bcrypt' => [ + 'rounds' => env('BCRYPT_ROUNDS', 10), + ], + + /* + |-------------------------------------------------------------------------- + | Argon Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Argon algorithm. These will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'argon' => [ + 'memory' => 65536, + 'threads' => 1, + 'time' => 4, + ], + +]; diff --git a/config/larabb.php b/config/larabb.php new file mode 100644 index 0000000..3840ae4 --- /dev/null +++ b/config/larabb.php @@ -0,0 +1,22 @@ + 'fluid', + + /** + * Switch between "classic" and "modern" variants of displaying postings in a thread + * + * Classic = Authors information are left besides the post content + * Modern = Authors information are above the post content + * + * Allowed values: classic|modern + */ + 'thread-style' => 'classic' +]; diff --git a/config/logging.php b/config/logging.php new file mode 100644 index 0000000..5aa1dbb --- /dev/null +++ b/config/logging.php @@ -0,0 +1,122 @@ + env('LOG_CHANNEL', 'stack'), + + /* + |-------------------------------------------------------------------------- + | Deprecations Log Channel + |-------------------------------------------------------------------------- + | + | This option controls the log channel that should be used to log warnings + | regarding deprecated PHP and library features. This allows you to get + | your application ready for upcoming major versions of dependencies. + | + */ + + 'deprecations' => [ + 'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'), + 'trace' => false, + ], + + /* + |-------------------------------------------------------------------------- + | Log Channels + |-------------------------------------------------------------------------- + | + | Here you may configure the log channels for your application. Out of + | the box, Laravel uses the Monolog PHP logging library. This gives + | you a variety of powerful log handlers / formatters to utilize. + | + | Available Drivers: "single", "daily", "slack", "syslog", + | "errorlog", "monolog", + | "custom", "stack" + | + */ + + 'channels' => [ + 'stack' => [ + 'driver' => 'stack', + 'channels' => ['single'], + 'ignore_exceptions' => false, + ], + + 'single' => [ + 'driver' => 'single', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'daily' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + 'days' => 14, + ], + + 'slack' => [ + 'driver' => 'slack', + 'url' => env('LOG_SLACK_WEBHOOK_URL'), + 'username' => 'Laravel Log', + 'emoji' => ':boom:', + 'level' => env('LOG_LEVEL', 'critical'), + ], + + 'papertrail' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class), + 'handler_with' => [ + 'host' => env('PAPERTRAIL_URL'), + 'port' => env('PAPERTRAIL_PORT'), + 'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'), + ], + ], + + 'stderr' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => StreamHandler::class, + 'formatter' => env('LOG_STDERR_FORMATTER'), + 'with' => [ + 'stream' => 'php://stderr', + ], + ], + + 'syslog' => [ + 'driver' => 'syslog', + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'errorlog' => [ + 'driver' => 'errorlog', + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'null' => [ + 'driver' => 'monolog', + 'handler' => NullHandler::class, + ], + + 'emergency' => [ + 'path' => storage_path('logs/laravel.log'), + ], + ], + +]; diff --git a/config/mail.php b/config/mail.php new file mode 100644 index 0000000..534395a --- /dev/null +++ b/config/mail.php @@ -0,0 +1,118 @@ + env('MAIL_MAILER', 'smtp'), + + /* + |-------------------------------------------------------------------------- + | Mailer Configurations + |-------------------------------------------------------------------------- + | + | Here you may configure all of the mailers used by your application plus + | their respective settings. Several examples have been configured for + | you and you are free to add your own as your application requires. + | + | Laravel supports a variety of mail "transport" drivers to be used while + | sending an e-mail. You will specify which one you are using for your + | mailers below. You are free to add additional mailers as required. + | + | Supported: "smtp", "sendmail", "mailgun", "ses", + | "postmark", "log", "array", "failover" + | + */ + + 'mailers' => [ + 'smtp' => [ + 'transport' => 'smtp', + 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), + 'port' => env('MAIL_PORT', 587), + 'encryption' => env('MAIL_ENCRYPTION', 'tls'), + 'username' => env('MAIL_USERNAME'), + 'password' => env('MAIL_PASSWORD'), + 'timeout' => null, + 'local_domain' => env('MAIL_EHLO_DOMAIN'), + ], + + 'ses' => [ + 'transport' => 'ses', + ], + + 'mailgun' => [ + 'transport' => 'mailgun', + ], + + 'postmark' => [ + 'transport' => 'postmark', + ], + + 'sendmail' => [ + 'transport' => 'sendmail', + 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'), + ], + + 'log' => [ + 'transport' => 'log', + 'channel' => env('MAIL_LOG_CHANNEL'), + ], + + 'array' => [ + 'transport' => 'array', + ], + + 'failover' => [ + 'transport' => 'failover', + 'mailers' => [ + 'smtp', + 'log', + ], + ], + ], + + /* + |-------------------------------------------------------------------------- + | Global "From" Address + |-------------------------------------------------------------------------- + | + | You may wish for all e-mails sent by your application to be sent from + | the same address. Here, you may specify a name and address that is + | used globally for all e-mails that are sent by your application. + | + */ + + 'from' => [ + 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), + 'name' => env('MAIL_FROM_NAME', 'Example'), + ], + + /* + |-------------------------------------------------------------------------- + | Markdown Mail Settings + |-------------------------------------------------------------------------- + | + | If you are using Markdown based email rendering, you may configure your + | theme and component paths here, allowing you to customize the design + | of the emails. Or, you may simply stick with the Laravel defaults! + | + */ + + 'markdown' => [ + 'theme' => 'default', + + 'paths' => [ + resource_path('views/vendor/mail'), + ], + ], + +]; diff --git a/config/permission.php b/config/permission.php new file mode 100644 index 0000000..1a4207e --- /dev/null +++ b/config/permission.php @@ -0,0 +1,143 @@ + [ + + /* + * When using the "HasPermissions" trait from this package, we need to know which + * Eloquent model should be used to retrieve your permissions. Of course, it + * is often just the "Permission" model but you may use whatever you like. + * + * The model you want to use as a Permission model needs to implement the + * `Spatie\Permission\Contracts\Permission` contract. + */ + + 'permission' => Spatie\Permission\Models\Permission::class, + + /* + * When using the "HasRoles" trait from this package, we need to know which + * Eloquent model should be used to retrieve your roles. Of course, it + * is often just the "Role" model but you may use whatever you like. + * + * The model you want to use as a Role model needs to implement the + * `Spatie\Permission\Contracts\Role` contract. + */ + + 'role' => Spatie\Permission\Models\Role::class, + + ], + + 'table_names' => [ + + /* + * When using the "HasRoles" trait from this package, we need to know which + * table should be used to retrieve your roles. We have chosen a basic + * default value but you may easily change it to any table you like. + */ + + 'roles' => 'roles', + + /* + * When using the "HasPermissions" trait from this package, we need to know which + * table should be used to retrieve your permissions. We have chosen a basic + * default value but you may easily change it to any table you like. + */ + + 'permissions' => 'permissions', + + /* + * When using the "HasPermissions" trait from this package, we need to know which + * table should be used to retrieve your models permissions. We have chosen a + * basic default value but you may easily change it to any table you like. + */ + + 'model_has_permissions' => 'model_has_permissions', + + /* + * When using the "HasRoles" trait from this package, we need to know which + * table should be used to retrieve your models roles. We have chosen a + * basic default value but you may easily change it to any table you like. + */ + + 'model_has_roles' => 'model_has_roles', + + /* + * When using the "HasRoles" trait from this package, we need to know which + * table should be used to retrieve your roles permissions. We have chosen a + * basic default value but you may easily change it to any table you like. + */ + + 'role_has_permissions' => 'role_has_permissions', + ], + + 'column_names' => [ + + /* + * Change this if you want to name the related model primary key other than + * `model_id`. + * + * For example, this would be nice if your primary keys are all UUIDs. In + * that case, name this `model_uuid`. + */ + + 'model_morph_key' => 'model_id', + ], + + /* + * When set to true, the required permission names are added to the exception + * message. This could be considered an information leak in some contexts, so + * the default setting is false here for optimum safety. + */ + + 'display_permission_in_exception' => false, + + /* + * When set to true, the required role names are added to the exception + * message. This could be considered an information leak in some contexts, so + * the default setting is false here for optimum safety. + */ + + 'display_role_in_exception' => false, + + /* + * By default wildcard permission lookups are disabled. + */ + + 'enable_wildcard_permission' => false, + + 'cache' => [ + + /* + * By default all permissions are cached for 24 hours to speed up performance. + * When permissions or roles are updated the cache is flushed automatically. + */ + + 'expiration_time' => \DateInterval::createFromDateString('24 hours'), + + /* + * The cache key used to store all permissions. + */ + + 'key' => 'spatie.permission.cache', + + /* + * When checking for a permission against a model by passing a Permission + * instance to the check, this key determines what attribute on the + * Permissions model is used to cache against. + * + * Ideally, this should match your preferred way of checking permissions, eg: + * `$user->can('view-posts')` would be 'name'. + */ + + 'model_key' => 'name', + + /* + * You may optionally indicate a specific cache driver to use for permission and + * role caching using any of the `store` drivers listed in the cache.php config + * file. Using 'default' here means to use the `default` set in cache.php. + */ + + 'store' => 'default', + ], +]; diff --git a/config/queue.php b/config/queue.php new file mode 100644 index 0000000..25ea5a8 --- /dev/null +++ b/config/queue.php @@ -0,0 +1,93 @@ + env('QUEUE_CONNECTION', 'sync'), + + /* + |-------------------------------------------------------------------------- + | Queue Connections + |-------------------------------------------------------------------------- + | + | Here you may configure the connection information for each server that + | is used by your application. A default configuration has been added + | for each back-end shipped with Laravel. You are free to add more. + | + | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null" + | + */ + + 'connections' => [ + + 'sync' => [ + 'driver' => 'sync', + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'jobs', + 'queue' => 'default', + 'retry_after' => 90, + 'after_commit' => false, + ], + + 'beanstalkd' => [ + 'driver' => 'beanstalkd', + 'host' => 'localhost', + 'queue' => 'default', + 'retry_after' => 90, + 'block_for' => 0, + 'after_commit' => false, + ], + + 'sqs' => [ + 'driver' => 'sqs', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), + 'queue' => env('SQS_QUEUE', 'default'), + 'suffix' => env('SQS_SUFFIX'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'after_commit' => false, + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + 'queue' => env('REDIS_QUEUE', 'default'), + 'retry_after' => 90, + 'block_for' => null, + 'after_commit' => false, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Failed Queue Jobs + |-------------------------------------------------------------------------- + | + | These options configure the behavior of failed queue job logging so you + | can control which database and table are used to store the jobs that + | have failed. You may change them to any database / table you wish. + | + */ + + 'failed' => [ + 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'), + 'database' => env('DB_CONNECTION', 'mysql'), + 'table' => 'failed_jobs', + ], + +]; diff --git a/config/sanctum.php b/config/sanctum.php new file mode 100644 index 0000000..529cfdc --- /dev/null +++ b/config/sanctum.php @@ -0,0 +1,67 @@ + explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf( + '%s%s', + 'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1', + Sanctum::currentApplicationUrlWithPort() + ))), + + /* + |-------------------------------------------------------------------------- + | Sanctum Guards + |-------------------------------------------------------------------------- + | + | This array contains the authentication guards that will be checked when + | Sanctum is trying to authenticate a request. If none of these guards + | are able to authenticate the request, Sanctum will use the bearer + | token that's present on an incoming request for authentication. + | + */ + + 'guard' => ['web'], + + /* + |-------------------------------------------------------------------------- + | Expiration Minutes + |-------------------------------------------------------------------------- + | + | This value controls the number of minutes until an issued token will be + | considered expired. If this value is null, personal access tokens do + | not expire. This won't tweak the lifetime of first-party sessions. + | + */ + + 'expiration' => null, + + /* + |-------------------------------------------------------------------------- + | Sanctum Middleware + |-------------------------------------------------------------------------- + | + | When authenticating your first-party SPA with Sanctum you may need to + | customize some of the middleware Sanctum uses while processing the + | request. You may change the middleware listed below as required. + | + */ + + 'middleware' => [ + 'verify_csrf_token' => App\Http\Middleware\VerifyCsrfToken::class, + 'encrypt_cookies' => App\Http\Middleware\EncryptCookies::class, + ], + +]; diff --git a/config/services.php b/config/services.php new file mode 100644 index 0000000..0ace530 --- /dev/null +++ b/config/services.php @@ -0,0 +1,34 @@ + [ + 'domain' => env('MAILGUN_DOMAIN'), + 'secret' => env('MAILGUN_SECRET'), + 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), + 'scheme' => 'https', + ], + + 'postmark' => [ + 'token' => env('POSTMARK_TOKEN'), + ], + + 'ses' => [ + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + ], + +]; diff --git a/config/session.php b/config/session.php new file mode 100644 index 0000000..8fed97c --- /dev/null +++ b/config/session.php @@ -0,0 +1,201 @@ + env('SESSION_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Session Lifetime + |-------------------------------------------------------------------------- + | + | Here you may specify the number of minutes that you wish the session + | to be allowed to remain idle before it expires. If you want them + | to immediately expire on the browser closing, set that option. + | + */ + + 'lifetime' => env('SESSION_LIFETIME', 120), + + 'expire_on_close' => false, + + /* + |-------------------------------------------------------------------------- + | Session Encryption + |-------------------------------------------------------------------------- + | + | This option allows you to easily specify that all of your session data + | should be encrypted before it is stored. All encryption will be run + | automatically by Laravel and you can use the Session like normal. + | + */ + + 'encrypt' => false, + + /* + |-------------------------------------------------------------------------- + | Session File Location + |-------------------------------------------------------------------------- + | + | When using the native session driver, we need a location where session + | files may be stored. A default has been set for you but a different + | location may be specified. This is only needed for file sessions. + | + */ + + 'files' => storage_path('framework/sessions'), + + /* + |-------------------------------------------------------------------------- + | Session Database Connection + |-------------------------------------------------------------------------- + | + | When using the "database" or "redis" session drivers, you may specify a + | connection that should be used to manage these sessions. This should + | correspond to a connection in your database configuration options. + | + */ + + 'connection' => env('SESSION_CONNECTION'), + + /* + |-------------------------------------------------------------------------- + | Session Database Table + |-------------------------------------------------------------------------- + | + | When using the "database" session driver, you may specify the table we + | should use to manage the sessions. Of course, a sensible default is + | provided for you; however, you are free to change this as needed. + | + */ + + 'table' => 'sessions', + + /* + |-------------------------------------------------------------------------- + | Session Cache Store + |-------------------------------------------------------------------------- + | + | While using one of the framework's cache driven session backends you may + | list a cache store that should be used for these sessions. This value + | must match with one of the application's configured cache "stores". + | + | Affects: "apc", "dynamodb", "memcached", "redis" + | + */ + + 'store' => env('SESSION_STORE'), + + /* + |-------------------------------------------------------------------------- + | Session Sweeping Lottery + |-------------------------------------------------------------------------- + | + | Some session drivers must manually sweep their storage location to get + | rid of old sessions from storage. Here are the chances that it will + | happen on a given request. By default, the odds are 2 out of 100. + | + */ + + 'lottery' => [2, 100], + + /* + |-------------------------------------------------------------------------- + | Session Cookie Name + |-------------------------------------------------------------------------- + | + | Here you may change the name of the cookie used to identify a session + | instance by ID. The name specified here will get used every time a + | new session cookie is created by the framework for every driver. + | + */ + + 'cookie' => env( + 'SESSION_COOKIE', + Str::slug(env('APP_NAME', 'laravel'), '_').'_session' + ), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Path + |-------------------------------------------------------------------------- + | + | The session cookie path determines the path for which the cookie will + | be regarded as available. Typically, this will be the root path of + | your application but you are free to change this when necessary. + | + */ + + 'path' => '/', + + /* + |-------------------------------------------------------------------------- + | Session Cookie Domain + |-------------------------------------------------------------------------- + | + | Here you may change the domain of the cookie used to identify a session + | in your application. This will determine which domains the cookie is + | available to in your application. A sensible default has been set. + | + */ + + 'domain' => env('SESSION_DOMAIN'), + + /* + |-------------------------------------------------------------------------- + | HTTPS Only Cookies + |-------------------------------------------------------------------------- + | + | By setting this option to true, session cookies will only be sent back + | to the server if the browser has a HTTPS connection. This will keep + | the cookie from being sent to you when it can't be done securely. + | + */ + + 'secure' => env('SESSION_SECURE_COOKIE'), + + /* + |-------------------------------------------------------------------------- + | HTTP Access Only + |-------------------------------------------------------------------------- + | + | Setting this value to true will prevent JavaScript from accessing the + | value of the cookie and the cookie will only be accessible through + | the HTTP protocol. You are free to modify this option if needed. + | + */ + + 'http_only' => true, + + /* + |-------------------------------------------------------------------------- + | Same-Site Cookies + |-------------------------------------------------------------------------- + | + | This option determines how your cookies behave when cross-site requests + | take place, and can be used to mitigate CSRF attacks. By default, we + | will set this value to "lax" since this is a secure default value. + | + | Supported: "lax", "strict", "none", null + | + */ + + 'same_site' => 'lax', + +]; diff --git a/config/tidy.php b/config/tidy.php new file mode 100644 index 0000000..d13c91f --- /dev/null +++ b/config/tidy.php @@ -0,0 +1,72 @@ + extension_loaded('tidy'), + + // Process AJAX requests + 'ajax' => false, + + // Encoding of your original documents. This refers to the encoding that you original documents have, + // not the enconding that will be used for the output. + 'encoding' => 'utf8', // Possible values: ascii, latin0, latin1, raw, utf8, iso2022, mac, win1252, ibm858, utf16, utf16le, utf16be, big5, and shiftjis. + + // Doctype used for the output + 'doctype' => '', + + // Append errors to output + 'display_errors' => false, + + // Errors container opening tag + 'container_open_tag' => '
[x]', + + // Errors container closing tag + 'container_close_tag' => '
', + + // Options passed to HTML Tidy parseString() function. Docs: http://tidy.sourceforge.net/docs/quickref.html + 'tidy_options' => [ + 'output-xhtml' => false, + 'drop-empty-elements' => false, + 'char-encoding' => 'utf8', + 'wrap' => 0, + 'wrap-sections' => false, + 'indent' => true, // 2 is equivalent to 'auto', which seems to be ignored by PHP-html-tidy extension + 'indent-spaces' => 4, + 'vertical-space' => 0, + + + // HTML5 workarounds + 'doctype' => 'omit', //The filter will add the configured doctype later + 'new-blocklevel-tags' => 'article,aside,canvas,dialog,embed,figcaption,figure,footer,header,hgroup,nav,output,progress,section,video', + 'new-inline-tags' => 'audio,bdi,command,datagrid,datalist,details,keygen,mark,meter,rp,rt,ruby,source,summary,time,track,wbr', + ], + + // Errors that match these regexs wont be displayed + 'ignored_errors' => [ + // workaround to hide errors related to HTML5 + "/line.* proprietary attribute \"class\"\n?/", + "/line.* proprietary attribute \"autocomplete\"\n?/", + "/line.* proprietary attribute \"autofocus\"\n?/", + "/line.* lacks \"content\" attribute\n?/", + "/line.* proprietary attribute \"charset\"\n?/", + "/line.* + + + @yield('pagejs') + + diff --git a/resources/views/partials/admin/settings-tabs.blade.php b/resources/views/partials/admin/settings-tabs.blade.php new file mode 100644 index 0000000..051c0d9 --- /dev/null +++ b/resources/views/partials/admin/settings-tabs.blade.php @@ -0,0 +1,12 @@ + diff --git a/resources/views/partials/breadcrumb.blade.php b/resources/views/partials/breadcrumb.blade.php new file mode 100644 index 0000000..0d3a393 --- /dev/null +++ b/resources/views/partials/breadcrumb.blade.php @@ -0,0 +1,20 @@ +

+@foreach($items as $item) + @php if(is_null($item)) continue; @endphp + @if(isset($item['href'])) + @if(isset($item['icon']))@endif{{ $item['label'] ?? '' }} + @else + @lang($item['label']) + @endif + @if(!$loop->last) » @endif +@endforeach +

+

+ @foreach($items as $item) @if(isset($item['mobile'])) + @if(isset($item['href'])) + + @else + @lang($item['label']) + @endif + @endif @endforeach +

diff --git a/resources/views/partials/button.blade.php b/resources/views/partials/button.blade.php new file mode 100644 index 0000000..d06a41a --- /dev/null +++ b/resources/views/partials/button.blade.php @@ -0,0 +1,24 @@ +@if(!isset($permission)) +@if(isset($type)) + + @lang($label) + +@else + + @lang($label) + +@endif +@else +@if($currentUser->forumPermissions[$forum->uuid]->getAttribute($permission)) +@if(isset($type)) + + + @lang($label) + +@else + + @lang($label) + +@endif +@endif +@endif diff --git a/resources/views/partials/messages.blade.php b/resources/views/partials/messages.blade.php new file mode 100644 index 0000000..a49ceec --- /dev/null +++ b/resources/views/partials/messages.blade.php @@ -0,0 +1,30 @@ +@if(session()->has('success')) +
+ {{ session('success') }} +
+@endif +@if(session()->has('error')) +
+ {{ session('error') }} +
+@endif +@if(session()->has('warning')) +
+ {{ session('warning') }} +
+@endif +@if(session()->has('info')) +
+ {{ session('info') }} +
+@endif +@if(!$errors->isEmpty()) +
+

@lang('Ooops...some errors occured'):

+
    + @foreach($errors->all() as $error) +
  1. {{ $error }}
  2. + @endforeach +
+
+@endif diff --git a/resources/views/welcome.blade.php b/resources/views/welcome.blade.php new file mode 100644 index 0000000..dd6a45d --- /dev/null +++ b/resources/views/welcome.blade.php @@ -0,0 +1,132 @@ + + + + + + + Laravel + + + + + + + + + + +
+ @if (Route::has('login')) + + @endif + +
+
+ + + + + +
+ +
+
+
+ + +
+
+ Laravel has wonderful, thorough documentation covering every aspect of the framework. Whether you are new to the framework or have previous experience with Laravel, we recommend reading all of the documentation from beginning to end. +
+
+
+ +
+
+ + +
+ +
+
+ Laracasts offers thousands of video tutorials on Laravel, PHP, and JavaScript development. Check them out, see for yourself, and massively level up your development skills in the process. +
+
+
+ +
+
+ + +
+ +
+
+ Laravel News is a community driven portal and newsletter aggregating all of the latest and most important news in the Laravel ecosystem, including new package releases and tutorials. +
+
+
+ +
+
+ +
Vibrant Ecosystem
+
+ +
+
+ Laravel's robust library of first-party tools and libraries, such as Forge, Vapor, Nova, and Envoyer help you take your projects to the next level. Pair them with powerful open source libraries like Cashier, Dusk, Echo, Horizon, Sanctum, Telescope, and more. +
+
+
+
+
+ +
+
+
+ + + + + + Shop + + + + + + + + Sponsor + +
+
+ +
+ Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }}) +
+
+
+
+ + diff --git a/routes/api.php b/routes/api.php new file mode 100644 index 0000000..eb6fa48 --- /dev/null +++ b/routes/api.php @@ -0,0 +1,19 @@ +get('/user', function (Request $request) { + return $request->user(); +}); diff --git a/routes/channels.php b/routes/channels.php new file mode 100644 index 0000000..5d451e1 --- /dev/null +++ b/routes/channels.php @@ -0,0 +1,18 @@ +id === (int) $id; +}); diff --git a/routes/console.php b/routes/console.php new file mode 100644 index 0000000..e05f4c9 --- /dev/null +++ b/routes/console.php @@ -0,0 +1,19 @@ +comment(Inspiring::quote()); +})->purpose('Display an inspiring quote'); diff --git a/routes/web.php b/routes/web.php new file mode 100644 index 0000000..8c10498 --- /dev/null +++ b/routes/web.php @@ -0,0 +1,77 @@ + $value, + 'hashed' => Hash::make($value) + ]; + } + + $randomPassword = Str::random(); + return [ + 'password' => $randomPassword, + 'hashed' => Hash::make($randomPassword) + ]; +}); + +// Verschlüssele einen Wert +Route::get('enc/{value}', function($value) { + return [ + 'uncrypted' => $value, + 'encrypted' => encrypt($value) + ]; +}); + +// Entschlüssele einen Wert +Route::get('dec/{value}', function($value) { + return [ + 'encrypted' => $value, + 'decrypted' => decrypt($value) + ]; +}); + +// Zufallszeichen mit Länge +Route::get('random/{length?}', function(int $length = 16) { + return [ + 'string' => Str::random($length), + 'length' => $length + ]; +})->name('random-string'); + +// Erzeuge UUID +Route::get('uuid', function() { + return [ + Uuid::uuid4() + ]; +}); + +// Erzeuge UUID +Route::get('slug/{value?}', function($value) { + return [ + 'value' => $value, + 'slug' => Str::slug($value) + ]; +})->name('slug'); + +// phpInfo +Route::get('info', function() { return phpinfo(); }); diff --git a/server.php b/server.php new file mode 100644 index 0000000..5fb6379 --- /dev/null +++ b/server.php @@ -0,0 +1,21 @@ + + */ + +$uri = urldecode( + parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) +); + +// This file allows us to emulate Apache's "mod_rewrite" functionality from the +// built-in PHP web server. This provides a convenient way to test a Laravel +// application without having installed a "real" web server software here. +if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) { + return false; +} + +require_once __DIR__.'/public/index.php'; diff --git a/storage/app/.gitignore b/storage/app/.gitignore new file mode 100644 index 0000000..8f4803c --- /dev/null +++ b/storage/app/.gitignore @@ -0,0 +1,3 @@ +* +!public/ +!.gitignore diff --git a/storage/app/public/.gitignore b/storage/app/public/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/app/public/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/debugbar/.gitignore b/storage/debugbar/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/debugbar/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/.gitignore b/storage/framework/.gitignore new file mode 100644 index 0000000..05c4471 --- /dev/null +++ b/storage/framework/.gitignore @@ -0,0 +1,9 @@ +compiled.php +config.php +down +events.scanned.php +maintenance.php +routes.php +routes.scanned.php +schedule-* +services.json diff --git a/storage/framework/cache/.gitignore b/storage/framework/cache/.gitignore new file mode 100644 index 0000000..01e4a6c --- /dev/null +++ b/storage/framework/cache/.gitignore @@ -0,0 +1,3 @@ +* +!data/ +!.gitignore diff --git a/storage/framework/cache/data/.gitignore b/storage/framework/cache/data/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/cache/data/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/sessions/.gitignore b/storage/framework/sessions/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/sessions/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/testing/.gitignore b/storage/framework/testing/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/testing/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/views/.gitignore b/storage/framework/views/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/views/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/logs/.gitignore b/storage/logs/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/logs/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/tests/CreatesApplication.php b/tests/CreatesApplication.php new file mode 100644 index 0000000..547152f --- /dev/null +++ b/tests/CreatesApplication.php @@ -0,0 +1,22 @@ +make(Kernel::class)->bootstrap(); + + return $app; + } +} diff --git a/tests/Feature/ExampleTest.php b/tests/Feature/ExampleTest.php new file mode 100644 index 0000000..78ccc21 --- /dev/null +++ b/tests/Feature/ExampleTest.php @@ -0,0 +1,21 @@ +get('/'); + + $response->assertStatus(200); + } +} diff --git a/tests/TestCase.php b/tests/TestCase.php new file mode 100644 index 0000000..2932d4a --- /dev/null +++ b/tests/TestCase.php @@ -0,0 +1,10 @@ +assertTrue(true); + } +} diff --git a/webpack.mix.js b/webpack.mix.js new file mode 100644 index 0000000..f4ad934 --- /dev/null +++ b/webpack.mix.js @@ -0,0 +1,24 @@ +const mix = require('laravel-mix'); + +/* + |-------------------------------------------------------------------------- + | Mix Asset Management + |-------------------------------------------------------------------------- + | + | Mix provides a clean, fluent API for defining some Webpack build steps + | for your Laravel applications. By default, we are compiling the CSS + | file for the application as well as bundling up all the JS files. + | + */ + +mix.setPublicPath('public/'); +mix.setResourceRoot('../'); +mix.js('resources/js/app.js', 'public/js') + .copy('resources/fonts', 'public/fonts') + .sass('resources/scss/app.scss', 'public/css', {}, []) + + +mix.browserSync({ + proxy: 'larabb.lando' +}); +