From 2d82668fdbd9465c34909f07befecfd604a91890 Mon Sep 17 00:00:00 2001 From: Marcel Folaron Date: Thu, 6 Jun 2024 11:39:12 -0400 Subject: [PATCH] session naming clean up & core core clean up --- .idea/leantime-oss.iml | 9 +- .idea/php.xml | 6 +- .idea/phpspec.xml | 3 + app/Core/Application.php | 219 +++++ app/Core/Bootloader.php | 240 +---- app/Core/Environment.php | 27 +- app/Core/HttpKernel.php | 38 +- app/Core/Middleware/StartSession.php | 5 +- app/Core/Template.php | 4 +- app/Domain/Auth/Services/Auth.php | 8 +- .../Calendar/Templates/showMyCalendar.tpl.php | 14 +- app/Domain/Dashboard/Templates/home.blade.php | 2 +- app/Domain/Dashboard/Templates/show.blade.php | 2 +- app/Domain/Help/Composers/Helpermodal.php | 12 +- .../Help/Controllers/ShowOnboardingDialog.php | 8 +- app/Domain/Menu/Composers/Menu.php | 2 +- app/Domain/Menu/Composers/ProjectSelector.php | 2 +- .../Menu/Hxcontrollers/ProjectSelector.php | 2 +- app/Domain/Menu/Repositories/Menu.php | 22 +- .../Templates/partials/clientGroup.blade.php | 10 +- .../Menu/Templates/partials/noGroup.blade.php | 8 +- .../Templates/partials/projectGroup.blade.php | 12 +- app/Domain/Tickets/Templates/calendar.tpl.php | 14 +- app/Domain/Tickets/Templates/roadmap.tpl.php | 2 +- .../Tickets/Templates/roadmapAll.tpl.php | 2 +- app/Domain/Users/Services/Users.php | 4 +- composer.json | 44 +- composer.lock | 920 ++++++------------ 28 files changed, 663 insertions(+), 978 deletions(-) diff --git a/.idea/leantime-oss.iml b/.idea/leantime-oss.iml index 43734fc7a..098015702 100644 --- a/.idea/leantime-oss.iml +++ b/.idea/leantime-oss.iml @@ -2,6 +2,9 @@ + + + @@ -115,7 +118,6 @@ - @@ -151,10 +153,6 @@ - - - - @@ -164,6 +162,7 @@ + diff --git a/.idea/php.xml b/.idea/php.xml index 651818565..a8aa7ba55 100644 --- a/.idea/php.xml +++ b/.idea/php.xml @@ -178,13 +178,9 @@ - - - - @@ -213,7 +209,6 @@ - @@ -226,6 +221,7 @@ + diff --git a/.idea/phpspec.xml b/.idea/phpspec.xml index 8645fe9c5..1ff09a14a 100644 --- a/.idea/phpspec.xml +++ b/.idea/phpspec.xml @@ -41,6 +41,9 @@ + + \ No newline at end of file diff --git a/app/Core/Application.php b/app/Core/Application.php index b89ac652f..9525102eb 100644 --- a/app/Core/Application.php +++ b/app/Core/Application.php @@ -2,7 +2,18 @@ namespace Leantime\Core; +use Illuminate\Cache\MemcachedConnector; use Illuminate\Container\Container; +use Illuminate\Contracts\Console\Kernel as ConsoleKernelContract; +use Illuminate\Contracts\Container\Container as IlluminateContainerContract; +use Illuminate\Contracts\Http\Kernel as HttpKernelContract; +use Illuminate\Support\Facades\Cache; +use Illuminate\Support\Facades\Facade; +use Leantime\Domain\Auth\Services\Auth as AuthService; +use Leantime\Domain\Modulemanager\Services\Modulemanager as ModulemanagerService; +use Leantime\Domain\Oidc\Services\Oidc as OidcService; +use Leantime\Domain\Setting\Services\Setting as SettingsService; +use Psr\Container\ContainerInterface as PsrContainerContract; /** * Application Class - IoC Container for the application @@ -19,6 +30,16 @@ class Application extends Container */ private static bool $bootstrapped = false; + + public function __construct(){ + + $this->registerCoreBindings(); + $this->registerCoreAliases(); + $this->bindRequest(); + + Facade::setFacadeApplication($this); + + } /** * Check if application has been bootstrapped * @@ -89,4 +110,202 @@ public function basePath() { return APP_ROOT; } + + protected function registerCoreBindings(): void + { + static::setInstance($this); + + $this->singleton(Application::class, fn() => Application::getInstance()); + + $this->singleton(Environment::class, Environment::class); + + $this->singleton(AppSettings::class, AppSettings::class); + $this->singleton(Db::class, Db::class); + $this->singleton(Frontcontroller::class, Frontcontroller::class); + $this->singleton(Language::class, Language::class); + $this->singleton(AuthService::class, AuthService::class); + $this->singleton(OidcService::class, OidcService::class); + $this->singleton(ModulemanagerService::class, ModulemanagerService::class); + $this->singleton(\Illuminate\Filesystem\Filesystem::class, fn () => new \Illuminate\Filesystem\Filesystem()); + $this->singleton(\Illuminate\Encryption\Encrypter::class, function ($app) { + $configKey = $app['config']->sessionPassword; + + if (strlen($configKey) > 32) { + $configKey = substr($configKey, 0, 32); + } + + if (strlen($configKey) < 32) { + $configKey = str_pad($configKey, 32, "x", STR_PAD_BOTH); + } + + $app['config']['app_key'] = $configKey; + + $encrypter = new \Illuminate\Encryption\Encrypter($app['config']['app_key'], "AES-256-CBC"); + return $encrypter; + }); + + $this->singleton(\Illuminate\Session\SessionManager::class, function ($app) { + + $app['config']['session'] = array( + 'driver' => "file", + 'lifetime' => $app['config']->sessionExpiration, + 'expire_on_close' => false, + 'encrypt' => false, + 'files' => APP_ROOT . '/cache/sessions', + 'lottery' => [2, 100], + 'cookie' => "ltid", + 'path' => '/', + 'domain' => is_array(parse_url(BASE_URL)) ? parse_url(BASE_URL)['host'] : null, + 'secure' => true, + 'http_only' => true, + 'same_site' => "Strict", + ); + + $sessionManager = new \Illuminate\Session\SessionManager($app); + + return $sessionManager; + }); + + $this->singleton('session.store', fn($app) => $app['session']->driver()); + + + /** + * @todo the following should eventually automatically turn caches into redis if available, + * then memcached if available, + * then fileStore + */ + $this->singleton(\Illuminate\Cache\CacheManager::class, function ($app) { + + //installation cache is per server + $app['config']['cache.stores.installation'] = [ + 'driver' => 'file', + 'connection' => 'default', + 'path' => APP_ROOT . '/cache/installation', + ]; + + //Instance is per company id + $instanceStore = fn () => + $app['config']['cache.stores.instance'] = [ + 'driver' => 'file', + 'connection' => 'default', + 'path' => APP_ROOT . "/cache/" . $app->make(SettingsService::class)->getCompanyId(), + ]; + + if ($app->make(IncomingRequest::class) instanceof CliRequest) { + if (empty($app->make(SettingsService::class)->getCompanyId())) { + throw new \RuntimeException('You can\'t run this CLI command until you have installed Leantime.'); + } + + $instanceStore(); + } else { + //Initialize instance cache store only after install was successfull + Events::add_event_listener( + 'leantime.core.middleware.installed.handle.after_install', + function () use ($instanceStore) { + if (! session("isInstalled")) { + return; + } + $instanceStore(); + } + ); + } + + $cacheManager = new \Illuminate\Cache\CacheManager($app); + //Setting the default does not mean that is exists already. + //Installation store is always available + //Instance store is only available post after_install event + $cacheManager->setDefaultDriver('instance'); + + return $cacheManager; + }); + $this->singleton('cache.store', fn ($app) => $app['cache']->driver()); + $this->singleton('cache.psr6', fn ($app) => new \Symfony\Component\Cache\Adapter\Psr16Adapter($app['cache.store'])); + $this->singleton('memcached.connector', fn () => new MemcachedConnector()); + + } + + /** + * Configure the real-time facade namespace. + * + * @param string $namespace + * @return void + */ + public function provideFacades($namespace) + { + + } + + private function registerCoreAliases(): void + { + + $this->alias(Application::class, 'app'); + $this->alias(Application::class, IlluminateContainerContract::class); + $this->alias(Application::class, PsrContainerContract::class); + $this->alias(Application::class, Container::class); + + $this->alias(Environment::class, 'config'); + $this->alias(Environment::class, \Illuminate\Contracts\Config\Repository::class); + + $this->alias(\Illuminate\Filesystem\Filesystem::class, 'files'); + $this->alias(ConsoleKernel::class, ConsoleKernelContract::class); + $this->alias(HttpKernel::class, HttpKernelContract::class); + + $this->alias(\Illuminate\Cache\CacheManager::class, 'cache'); + $this->alias(\Illuminate\Cache\CacheManager::class, \Illuminate\Contracts\Cache\Factory::class); + + $this->alias(\Illuminate\Session\SessionManager::class, 'session'); + + + $this->alias(\Illuminate\Encryption\Encrypter::class, "encrypter"); + + } + + + public function clearCache(): void + { + + $currentVersion = $this->app->make(AppSettings::class)->appVersion; + $cachedVersion = Cache::store('installation')->rememberForever('version', fn () => $currentVersion); + + if ($currentVersion == $cachedVersion) { + return; + } + + Cache::store('installation')->flush(); + + } + + /** + * Bind request + * + * @return void + */ + private function bindRequest(): void + { + + $headers = collect(getallheaders()) + ->mapWithKeys(fn ($val, $key) => [ + strtolower($key) => match (true) { + in_array($val, ['false', 'true']) => filter_var($val, FILTER_VALIDATE_BOOLEAN), + preg_match('/^[0-9]+$/', $val) => filter_var($val, FILTER_VALIDATE_INT), + default => $val, + }, + ]) + ->all(); + + $this->singleton(IncomingRequest::class, function () use ($headers) { + + $request = match (true) { + isset($headers['hx-request']) => HtmxRequest::createFromGlobals(), + isset($headers['x-api-key']) => ApiRequest::createFromGlobals(), + defined('LEAN_CLI') && LEAN_CLI => CliRequest::createFromGlobals(), + default => IncomingRequest::createFromGlobals(), + }; + + do_once('overrideGlobals', fn () => $request->overrideGlobals()); + + return $request; + }); + + } } diff --git a/app/Core/Bootloader.php b/app/Core/Bootloader.php index 7f56165b4..1ccc1350c 100644 --- a/app/Core/Bootloader.php +++ b/app/Core/Bootloader.php @@ -37,7 +37,7 @@ class Bootloader * * @var static */ - protected static Bootloader $instance; + protected static ?Bootloader $instance = null; /** * Application instance @@ -75,17 +75,6 @@ class Bootloader */ private bool|PromiseInterface $telemetryResponse; - /** - * Set the Bootloader instance - * - * @param Bootloader|null $instance - * @return void - */ - public static function setInstance(?self $instance): void - { - static::$instance = $instance; - } - /** * Get the Bootloader instance * @@ -94,7 +83,12 @@ public static function setInstance(?self $instance): void */ public static function getInstance(?PsrContainerContract $app = null): self { - return static::$instance ??= new self($app); + + if (is_null(static::$instance)) { + static::$instance = new self($app); + } + + return static::$instance; } /** @@ -102,11 +96,9 @@ public static function getInstance(?PsrContainerContract $app = null): self * * @param PsrContainerContract|null $app */ - public function __construct(?PsrContainerContract $app = null) + private function __construct(?PsrContainerContract $app = null) { $this->app = $app; - - static::$instance ??= $this; } /** @@ -117,7 +109,7 @@ public function __construct(?PsrContainerContract $app = null) */ public function __invoke(): void { - $this->boot(); + //$this->boot(); } /** @@ -132,24 +124,25 @@ public function boot(): void define('LEANTIME_START', microtime(true)); } - $app = $this->getApplication(); + $this->app = new Application(); - $app->make(AppSettings::class)->loadSettings(); + $test = 1; - $this->clearCache(); + $this->app->make(AppSettings::class)->loadSettings(); + + $this->app->clearCache(); Events::discover_listeners(); - $app = self::dispatch_filter("initialized", $app, ['bootloader' => $this]); + $this->app = self::dispatch_filter("initialized", $this->app, ['bootloader' => $this]); - $config = $app->make(Environment::class); + $config = $this->app['config']; $this->setErrorHandler($config->debug ?? 0); self::dispatch_event('config_initialized'); - - $request = $app->make(IncomingRequest::class); + $request = $this->app->make(IncomingRequest::class); if (! defined('BASE_URL')) { if (isset($config->appUrl) && !empty($config->appUrl)) { @@ -165,7 +158,7 @@ public function boot(): void self::dispatch_event("beginning", ['bootloader' => $this]); - if ($app::hasBeenBootstrapped()) { + if ($this->app::hasBeenBootstrapped()) { return; } @@ -173,177 +166,13 @@ public function boot(): void $this->handleRequest(); - $app::setHasBeenBootstrapped(); + $this->app::setHasBeenBootstrapped(); self::dispatch_event("end", ['bootloader' => $this]); } - /** - * Get the Application instance and bind important services - * - * @return Application - * @throws BindingResolutionException - * @todo Break this up into Service Providers - */ - public function getApplication(): Application - { - $this->app ??= Application::getInstance(); - - $this->registerCoreBindings(); - $this->registerCoreAliases(); - $this->bindRequest(); - - Facade::setFacadeApplication($this->app); - - Application::setInstance($this->app); - - return $this->app; - } - - private function registerCoreBindings(): void - { - $this->app->bind(Application::class, fn () => Application::getInstance()); - $this->app->singleton(Environment::class, Environment::class); - $this->app->singleton(AppSettings::class, AppSettings::class); - $this->app->singleton(Db::class, Db::class); - $this->app->singleton(Frontcontroller::class, Frontcontroller::class); - $this->app->singleton(Language::class, Language::class); - $this->app->singleton(AuthService::class, AuthService::class); - $this->app->singleton(OidcService::class, OidcService::class); - $this->app->singleton(ModulemanagerService::class, ModulemanagerService::class); - $this->app->singleton(\Illuminate\Filesystem\Filesystem::class, fn () => new \Illuminate\Filesystem\Filesystem()); - $this->app->singleton(\Illuminate\Encryption\Encrypter::class, function ($app) { - $configKey = app()->make(Environment::class)->sessionPassword; - - if (strlen($configKey) > 32) { - $configKey = substr($configKey, 0, 32); - } - - if (strlen($configKey) < 32) { - $configKey = str_pad($configKey, 32, "x", STR_PAD_BOTH); - } - - $app['config']['app_key'] = $configKey; - - $encrypter = new \Illuminate\Encryption\Encrypter($app['config']['app_key'], "AES-256-CBC"); - return $encrypter; - }); - - $this->app->singleton(\Illuminate\Session\SessionManager::class, function ($app) { - - $app['config']['session'] = array( - 'driver' => "file", - 'connection' => 'default', - 'lifetime' => $app['config']->sessionExpiration, - 'expire_on_close' => false, - 'encrypt' => true, - 'files' => APP_ROOT . '/cache/sessions', - 'store' => null, - 'lottery' => [2, 100], - 'cookie' => "ltid", - 'path' => '/', - 'domain' => is_array(parse_url(BASE_URL)) ? parse_url(BASE_URL)['host'] : null, - 'secure' => true, - 'http_only' => true, - 'same_site' => "Strict", - ); - - $sessionManager = new \Illuminate\Session\SessionManager($app); - - return $sessionManager; - }); - - $this->app->singleton('session.store', fn($app) => $app['session']->driver()); - - /** - * @todo the following should eventually automatically turn caches into redis if available, - * then memcached if available, - * then fileStore - **/ - $this->app->singleton(\Illuminate\Cache\CacheManager::class, function ($app) { - - //installation cache is per server - $app['config']['cache.stores.installation'] = [ - 'driver' => 'file', - 'connection' => 'default', - 'path' => APP_ROOT . '/cache/installation', - ]; - - //Instance is per company id - $instanceStore = fn () => - $app['config']['cache.stores.instance'] = [ - 'driver' => 'file', - 'connection' => 'default', - 'path' => APP_ROOT . "/cache/" . $app->make(SettingsService::class)->getCompanyId(), - ]; - - if ($app->make(IncomingRequest::class) instanceof CliRequest) { - if (empty($app->make(SettingsService::class)->getCompanyId())) { - throw new \RuntimeException('You can\'t run this CLI command until you have installed Leantime.'); - } - - $instanceStore(); - } else { - //Initialize instance cache store only after install was successfull - Events::add_event_listener( - 'leantime.core.middleware.installed.handle.after_install', - function () use ($instanceStore) { - if (! session("isInstalled")) { - return; - } - $instanceStore(); - } - ); - } - - $cacheManager = new \Illuminate\Cache\CacheManager($app); - //Setting the default does not mean that is exists already. - //Installation store is always available - //Instance store is only available post after_install event - $cacheManager->setDefaultDriver('instance'); - - return $cacheManager; - }); - $this->app->singleton('cache.store', fn ($app) => $app['cache']->driver()); - $this->app->singleton('cache.psr6', fn ($app) => new \Symfony\Component\Cache\Adapter\Psr16Adapter($app['cache.store'])); - $this->app->singleton('memcached.connector', fn () => new MemcachedConnector()); - } - - private function registerCoreAliases(): void - { - $this->app->alias(Application::class, 'app'); - $this->app->alias(Application::class, IlluminateContainerContract::class); - $this->app->alias(Application::class, PsrContainerContract::class); - $this->app->alias(Environment::class, 'config'); - $this->app->alias(Environment::class, \Illuminate\Contracts\Config\Repository::class); - $this->app->alias(\Illuminate\Filesystem\Filesystem::class, 'files'); - $this->app->alias(ConsoleKernel::class, ConsoleKernelContract::class); - $this->app->alias(HttpKernel::class, HttpKernelContract::class); - - $this->app->alias(\Illuminate\Cache\CacheManager::class, 'cache'); - $this->app->alias(\Illuminate\Cache\CacheManager::class, \Illuminate\Contracts\Cache\Factory::class); - - $this->app->alias(\Illuminate\Session\SessionManager::class, 'session'); - - $this->app->alias(\Illuminate\Encryption\Encrypter::class, "encrypter"); - - } - - - private function clearCache(): void - { - $currentVersion = app()->make(AppSettings::class)->appVersion; - $cachedVersion = Cache::store('installation')->rememberForever('version', fn () => $currentVersion); - - if ($currentVersion == $cachedVersion) { - return; - } - - Cache::store('installation')->flush(); - } - /** * Handle the request * @@ -395,34 +224,5 @@ private function setErrorHandler(int $debug): void Debug::enable(); } - /** - * Bind request - * - * @return void - */ - private function bindRequest(): void - { - $headers = collect(getallheaders()) - ->mapWithKeys(fn ($val, $key) => [ - strtolower($key) => match (true) { - in_array($val, ['false', 'true']) => filter_var($val, FILTER_VALIDATE_BOOLEAN), - preg_match('/^[0-9]+$/', $val) => filter_var($val, FILTER_VALIDATE_INT), - default => $val, - }, - ]) - ->all(); - - $this->app->singleton(IncomingRequest::class, function () use ($headers) { - $request = match (true) { - isset($headers['hx-request']) => HtmxRequest::createFromGlobals(), - isset($headers['x-api-key']) => ApiRequest::createFromGlobals(), - defined('LEAN_CLI') && LEAN_CLI => CliRequest::createFromGlobals(), - default => IncomingRequest::createFromGlobals(), - }; - - do_once('overrideGlobals', fn () => $request->overrideGlobals()); - - return $request; - }); - } + } diff --git a/app/Core/Environment.php b/app/Core/Environment.php index 22a89640e..7b2e613f6 100644 --- a/app/Core/Environment.php +++ b/app/Core/Environment.php @@ -9,7 +9,6 @@ use Illuminate\Support\Arr; use Illuminate\Support\Str; use Leantime\Config\Config; -use Illuminate\Support\Facades\Cache; use Symfony\Component\Yaml\Yaml; /** @@ -42,11 +41,6 @@ class Environment implements ArrayAccess, ConfigContract */ public array $config = []; - /** - * @var bool $configCached - */ - public bool $configCached = false; - /** * @var array list of legacy mappings * @todo remove this after deprecating configuration.php @@ -88,6 +82,7 @@ class Environment implements ArrayAccess, ConfigContract public function __construct(DefaultConfig $defaultConfiguration) { + /* PHP */ $this->phpConfig = null; if (file_exists($phpConfigFile = APP_ROOT . "/config/configuration.php")) { @@ -123,17 +118,21 @@ public function __construct(DefaultConfig $defaultConfiguration) ); } + $end = microtime(true); + //Cache is not available until after install. Events::add_event_listener( 'leantime.core.middleware.installed.handle.after_install', function () { - Cache::set("mainconfig", $this->config); - $this->configCached = true; + // }, 20 ); } + public function updateCache() { + file_put_contents(APP_ROOT . "/cache/configCache", serialize($this->config)); + } /** * getBool - get a boolean value from the environment * @@ -243,7 +242,7 @@ private function tryGetFromYaml(string $envVar, mixed $currentValue): mixed */ public function has($key): bool { - return Cache::has($key) || Arr::has($this->config, $key); + return Arr::has($this->config, $key); } /** @@ -259,11 +258,11 @@ public function get($key, $default = null): mixed return $this->getMany($key); } - return Arr::get([], $key, Arr::get( + return Arr::get( $this->config, $key, $default - )); + ); } /** @@ -300,12 +299,8 @@ public function set($key, $value = null): void foreach ($keys as $key => $value) { Arr::set($this->config, $key, $value); - - if($this->configCached === true && Cache::has("mainconfig")){ - Cache::set("mainconfig.".$key, $value); - } - } + } /** diff --git a/app/Core/HttpKernel.php b/app/Core/HttpKernel.php index 368d89d60..d6fd311e4 100644 --- a/app/Core/HttpKernel.php +++ b/app/Core/HttpKernel.php @@ -21,6 +21,12 @@ class HttpKernel implements HttpKernelContract */ protected $requestStartedAt = null; + protected Application $app; + + public function __construct(Application $app) { + $this->app = $app; + } + /** * Bootstrap the application if it has not been previously bootstrapped. * @@ -28,11 +34,11 @@ class HttpKernel implements HttpKernelContract */ public function bootstrap() { - if ($this->getApplication()->hasBeenBootstrapped()) { + if ($this->app->hasBeenBootstrapped()) { return; } - $this->getApplication()->boot(); + $this->app->boot(); } /** @@ -50,18 +56,20 @@ public function handle($request) try { - $response = (new Pipeline($this->getApplication())) + //Main Pipeline + $response = (new Pipeline($this->app)) ->send($request) ->through($this->getMiddleware()) ->then(fn ($request) => - (new Pipeline($this->getApplication())) - ->send($request) - ->through(self::dispatch_filter( - hook: 'plugins_middleware', - payload: [], - function: 'handle', - )) - ->then(fn () => Frontcontroller::dispatch()) + //Then run through plugin pipeline + (new Pipeline($this->app)) + ->send($request) + ->through(self::dispatch_filter( + hook: 'plugins_middleware', + payload: [], + function: 'handle', + )) + ->then(fn () => Frontcontroller::dispatch_request($request)) ); return self::dispatch_filter('beforeSendResponse', $response); @@ -102,8 +110,8 @@ function: 'handle', public function terminate($request, $response) { - if (method_exists($this->getApplication(), 'terminate')) { - $this->getApplication()->terminate(); + if (method_exists($this->app, 'terminate')) { + $this->app->terminate(); } if (is_null($this->requestStartedAt)) { @@ -136,7 +144,7 @@ public function terminate($request, $response) */ public function getApplication(): \Leantime\Core\Application { - return app(); + return $this->app; } /** @@ -152,7 +160,7 @@ public function getMiddleware(): array Middleware\Installed::class, Middleware\Updated::class, Middleware\RequestRateLimiter::class, - app()->make(IncomingRequest::class) instanceof ApiRequest + $this->app->make(IncomingRequest::class) instanceof ApiRequest ? Middleware\ApiAuth::class : Middleware\Auth::class, Middleware\Localization::class, diff --git a/app/Core/Middleware/StartSession.php b/app/Core/Middleware/StartSession.php index 07659057e..8d0b09d70 100644 --- a/app/Core/Middleware/StartSession.php +++ b/app/Core/Middleware/StartSession.php @@ -62,14 +62,15 @@ public function handle(IncomingRequest $request, Closure $next) $session = $this->getSession($request); self::dispatch_event('session_initialized'); + /* Handle blocking sessions if ( $this->manager->shouldBlock() || ($request->route() instanceof Route && $request->route()->locksFor()) ) { return $this->handleRequestWhileBlocking($request, $session, $next); - }*/ - + } +*/ return $this->handleStatefulRequest($request, $session, $next); } diff --git a/app/Core/Template.php b/app/Core/Template.php index f805d504d..0f397fd28 100644 --- a/app/Core/Template.php +++ b/app/Core/Template.php @@ -699,8 +699,8 @@ public function displayNotification(): string */ public function getToggleState(string $name): string { - if (session()->exists("submenuToggle".$name)) { - return session("submenuToggle".$name); + if (session()->exists("usersettings.submenuToggle.".$name)) { + return session("usersettings.submenuToggle.".$name); } return false; diff --git a/app/Domain/Auth/Services/Auth.php b/app/Domain/Auth/Services/Auth.php index 800cd4938..8ee587be4 100644 --- a/app/Domain/Auth/Services/Auth.php +++ b/app/Domain/Auth/Services/Auth.php @@ -331,9 +331,9 @@ public function setUsersession(mixed $user, bool $isLdap = false) $currentUser = self::dispatch_filter('user_session_vars', $currentUser); - $this->session->put('userdata', $currentUser); + session(['userdata' => $currentUser]); - $this->updateUserSessionDB($currentUser['id'], $this->session->getId()); + $this->updateUserSessionDB($currentUser['id'], session()->getId()); //Clear user theme cache on login Theme::clearCache(); @@ -361,7 +361,7 @@ public function updateUserSessionDB(int $userId, string $sessionID): bool public function loggedIn(): bool { // Check if we actually have a php session available - if ($this->session->exists("userdata")) { + if (session()->exists("userdata")) { return true; // If the session doesn't have any session data we are out of sync. Start again } else { @@ -390,7 +390,7 @@ public static function isLoggedIn(): bool */ public function getSessionId(): ?string { - return $this->session->getSid(); + return session()->getSid(); } /** diff --git a/app/Domain/Calendar/Templates/showMyCalendar.tpl.php b/app/Domain/Calendar/Templates/showMyCalendar.tpl.php index 9631cdbf4..4eaa419e3 100644 --- a/app/Domain/Calendar/Templates/showMyCalendar.tpl.php +++ b/app/Domain/Calendar/Templates/showMyCalendar.tpl.php @@ -3,8 +3,8 @@ foreach ($__data as $var => $val) { $$var = $val; // necessary for blade refactor } -if (!session()->exists("submenuToggle.myCalendarView")) { - session(["submenuToggle.myCalendarView" => "dayGridMonth"]); +if (!session()->exists("usersettings.submenuToggle.myCalendarView")) { + session(["usersettings.submenuToggle.myCalendarView" => "dayGridMonth"]); } ?> @@ -84,10 +84,10 @@ @@ -169,7 +169,7 @@ const calendar = new FullCalendar.Calendar(calendarEl, { timeZone: leantime.i18n.__("usersettings.timezone"), height:heightWindow, - initialView: '', + initialView: '', eventSources:eventSources, editable: true, headerToolbar: false, diff --git a/app/Domain/Dashboard/Templates/home.blade.php b/app/Domain/Dashboard/Templates/home.blade.php index 87edb8f36..e462c9b10 100644 --- a/app/Domain/Dashboard/Templates/home.blade.php +++ b/app/Domain/Dashboard/Templates/home.blade.php @@ -44,7 +44,7 @@ leantime.helperController.firstLoginModal(); @endif - @php(session(["userdata.settings.modals.homeDashboardTour" => 1])); + @php(session(["usersettings.modals.homeDashboardTour" => 1])); }); diff --git a/app/Domain/Dashboard/Templates/show.blade.php b/app/Domain/Dashboard/Templates/show.blade.php index ae55560d9..f38ed6790 100644 --- a/app/Domain/Dashboard/Templates/show.blade.php +++ b/app/Domain/Dashboard/Templates/show.blade.php @@ -582,7 +582,7 @@ function() { leantime.helperController.firstLoginModal(); @endif - @php(session(["userdata.settings.modals.projectDashboardTour" => 1])); + @php(session(["usersettings.modals.projectDashboardTour" => 1])); }); @dispatchEvent('scripts.beforeClose') diff --git a/app/Domain/Help/Composers/Helpermodal.php b/app/Domain/Help/Composers/Helpermodal.php index 9910a5243..6e1c13d02 100644 --- a/app/Domain/Help/Composers/Helpermodal.php +++ b/app/Domain/Help/Composers/Helpermodal.php @@ -49,15 +49,15 @@ public function with(): array $completedOnboarding == "1" && $currentModal !== 'notfound' && ( - session()->exists("userdata.settings.modals.".$currentModal) === false - || session("userdata.settings.modals.".$currentModal) == 0) + session()->exists("usersettings.modals.".$currentModal) === false + || session("usersettings.modals.".$currentModal) == 0) ) { - if (!session()->exists("userdata.settings.modals")) { - session(["userdata.settings.modals" => [] ]); + if (!session()->exists("usersettings.modals")) { + session(["usersettings.modals" => [] ]); } - if (!session()->exists("userdata.settings.modals.".$currentModal)) { - session(["userdata.settings.modals".$currentModal => 1]); + if (!session()->exists("usersettings.modals.".$currentModal)) { + session(["usersettings.modals.".$currentModal => 1]); $showHelperModal = true; } } diff --git a/app/Domain/Help/Controllers/ShowOnboardingDialog.php b/app/Domain/Help/Controllers/ShowOnboardingDialog.php index c902796cd..f999b06e2 100644 --- a/app/Domain/Help/Controllers/ShowOnboardingDialog.php +++ b/app/Domain/Help/Controllers/ShowOnboardingDialog.php @@ -19,15 +19,15 @@ public function get($params) { //show modals only once per session - if (!session()->exists("userdata")->settings["modals"]) { - session(["userdata.settings.modals" => array()]); + if (!session()->exists("usersettings.modals")) { + session(["usersettings.modals" => array()]); } if (isset($params['module']) && $params['module'] != "") { $filteredInput = htmlspecialchars($params['module']); - if (!session()->exists("userdata.settings.modals." . $filteredInput)) { - session(["userdata.settings.modals." . $filteredInput => 1]); + if (!session()->exists("usersettings.modals." . $filteredInput)) { + session(["usersettings.modals." . $filteredInput => 1]); } return $this->tpl->displayPartial('help.' . $filteredInput); diff --git a/app/Domain/Menu/Composers/Menu.php b/app/Domain/Menu/Composers/Menu.php index e88ba7c6c..1f92b8e1c 100644 --- a/app/Domain/Menu/Composers/Menu.php +++ b/app/Domain/Menu/Composers/Menu.php @@ -57,7 +57,7 @@ public function with(): array $projectType = ''; $menuType = 'default'; - $projectSelectFilter = session("userdata.projectSelectFilter") ?? array( + $projectSelectFilter = session("usersettings.projectSelectFilter") ?? array( "groupBy" => "structure", "client" => null, ); diff --git a/app/Domain/Menu/Composers/ProjectSelector.php b/app/Domain/Menu/Composers/ProjectSelector.php index 05b9171fe..928eb07fb 100644 --- a/app/Domain/Menu/Composers/ProjectSelector.php +++ b/app/Domain/Menu/Composers/ProjectSelector.php @@ -61,7 +61,7 @@ public function with(): array $projectType = ''; $menuType = 'default'; - $projectSelectFilter = session("userdata.projectSelectFilter", array( + $projectSelectFilter = session("usersettings.projectSelectFilter", array( "groupBy" => "structure", "client" => null, )); diff --git a/app/Domain/Menu/Hxcontrollers/ProjectSelector.php b/app/Domain/Menu/Hxcontrollers/ProjectSelector.php index 9d8d5bfdc..dd9e94de7 100644 --- a/app/Domain/Menu/Hxcontrollers/ProjectSelector.php +++ b/app/Domain/Menu/Hxcontrollers/ProjectSelector.php @@ -66,7 +66,7 @@ public function updateMenu(): void "client" => (int)$_POST['client'] ?? null, ); - session(["userdata.projectSelectFilter"=> $projectSelectFilter]); + session(["usersettings.projectSelectFilter"=> $projectSelectFilter]); if (session()->exists("userdata")) { //Getting all projects (ignoring client filter, clients are filtered on the frontend) diff --git a/app/Domain/Menu/Repositories/Menu.php b/app/Domain/Menu/Repositories/Menu.php index 4f24255ce..234f1af31 100644 --- a/app/Domain/Menu/Repositories/Menu.php +++ b/app/Domain/Menu/Repositories/Menu.php @@ -153,10 +153,10 @@ public function __construct( /** @var AuthService */ private AuthService $authService, ) { - if (session()->exists("submenuToggle") === false && session()->exists("userdata") === true) { + if (session()->exists("usersettings.submenuToggle") === false && session()->exists("userdata") === true) { $setting = $this->settingsRepo; session([ - "submenuToggle" => unserialize( + "usersettings.submenuToggle" => unserialize( $setting->getSetting("usersetting." . session("userdata.id") . ".submenuToggle") ), ]); @@ -197,12 +197,12 @@ public function getMenuTypes(): array public function setSubmenuState(string $submenu, string $state): void { - if (session()->exists("submenuToggle") && is_array(session("submenuToggle")) && $submenu !== false) { - session(["submenuToggle." . $submenu => $state]); + if (session()->exists("usersettings.submenuToggle") && is_array(session("usersettings.submenuToggle")) && $submenu !== false) { + session(["usersettings.submenuToggle." . $submenu => $state]); } $setting = $this->settingsRepo; - $setting->saveSetting("usersetting." . session("userdata.id") . ".submenuToggle", serialize(session("submenuToggle"))); + $setting->saveSetting("usersetting." . session("userdata.id") . ".submenuToggle", serialize(session("usersettings.submenuToggle"))); } /** @@ -216,9 +216,9 @@ public function getSubmenuState(string $submenu) $setting = $this->settingsRepo; $subStructure = $setting->getSetting("usersetting." . session("userdata.id") . ".submenuToggle"); - session(["submenuToggle" => unserialize($subStructure)]); + session(["usersettings.submenuToggle" => unserialize($subStructure)]); - return session("submenuToggle." . $submenu) ?? false; + return session("usersettings.submenuToggle." . $submenu) ?? false; } protected function buildMenuStructure(array $menuStructure, string $filter): array @@ -274,8 +274,8 @@ function ($menu) use ($menuType, $filter) { $menuStructure = $this->menuStructures[$menuType]; - if (session()->exists("submenuToggle") === false || is_array(session("submenuToggle")) === false) { - session(["submenuToggle" => array()]); + if (session()->exists("usersettings.submenuToggle") === false || is_array(session("usersettings.submenuToggle")) === false) { + session(["usersettings.submenuToggle" => array()]); } ksort($menuStructure); @@ -306,8 +306,8 @@ function ($menu) use ($menuType, $filter) { if ($element['visual'] == 'always') { $menuStructure[$key]['visual'] = 'open'; } else { - $submenuState = session("submenuToggle." . $element['id']) ?? $element['visual']; - session(["submenuToggle." . $element['id'] => $submenuState]); + $submenuState = session("usersettings.submenuToggle." . $element['id']) ?? $element['visual']; + session(["usersettings.submenuToggle." . $element['id'] => $submenuState]); } $menuStructure[$key]['visual'] = $submenuState; diff --git a/app/Domain/Menu/Templates/partials/clientGroup.blade.php b/app/Domain/Menu/Templates/partials/clientGroup.blade.php index b4d06a000..e5f9f7a20 100644 --- a/app/Domain/Menu/Templates/partials/clientGroup.blade.php +++ b/app/Domain/Menu/Templates/partials/clientGroup.blade.php @@ -7,14 +7,14 @@ @foreach($projects as $project) @php - $parentState = session("submenuToggle.".$prefix.'-projectSelectorlist-group-'.$project['clientId'], 'closed'); + $parentState = session("usersettings.submenuToggle.".$prefix.'-projectSelectorlist-group-'.$project['clientId'], 'closed'); @endphp @if( - !session()->exists("userdata.projectSelectFilter.client") - || session("userdata.projectSelectFilter.client") == $project["clientId"] - || session("userdata.projectSelectFilter.client") == 0 - || session("userdata.projectSelectFilter.client") == "" + !session()->exists("usersettings.projectSelectFilter.client") + || session("usersettings.projectSelectFilter.client") == $project["clientId"] + || session("usersettings.projectSelectFilter.client") == 0 + || session("usersettings.projectSelectFilter.client") == "" ) @if ($lastClient != $project['clientName']) diff --git a/app/Domain/Menu/Templates/partials/noGroup.blade.php b/app/Domain/Menu/Templates/partials/noGroup.blade.php index 5b1dbcb93..45faa3f38 100644 --- a/app/Domain/Menu/Templates/partials/noGroup.blade.php +++ b/app/Domain/Menu/Templates/partials/noGroup.blade.php @@ -2,10 +2,10 @@ @foreach($projects as $project) @if( - !session()->exists("userdata.projectSelectFilter.client") - || session("userdata.projectSelectFilter.client") == $project["clientId"] - || session("userdata.projectSelectFilter.client") == 0 - || session("userdata.projectSelectFilter.client") == "" + !session()->exists("usersettings.projectSelectFilter.client") + || session("usersettings.projectSelectFilter.client") == $project["clientId"] + || session("usersettings.projectSelectFilter.client") == 0 + || session("usersettings.projectSelectFilter.client") == "" )
  • diff --git a/app/Domain/Menu/Templates/partials/projectGroup.blade.php b/app/Domain/Menu/Templates/partials/projectGroup.blade.php index 817ec98aa..e6af2e3e3 100644 --- a/app/Domain/Menu/Templates/partials/projectGroup.blade.php +++ b/app/Domain/Menu/Templates/partials/projectGroup.blade.php @@ -1,20 +1,20 @@ @php - $groupState = session("submenuToggle.".$prefix.'-projectSelectorlist-group-'.$parent, 'closed'); + $groupState = session("usersettings.submenuToggle.".$prefix.'-projectSelectorlist-group-'.$parent, 'closed'); @endphp
      @foreach($projects as $project) @if( - !session()->exists("userdata.projectSelectFilter.client") - || session("userdata.projectSelectFilter.client") == $project["clientId"] - || session("userdata.projectSelectFilter.client") == 0 - || session("userdata.projectSelectFilter.client") == "" + !session()->exists("usersettings.projectSelectFilter.client") + || session("usersettings.projectSelectFilter.client") == $project["clientId"] + || session("usersettings.projectSelectFilter.client") == 0 + || session("usersettings.projectSelectFilter.client") == "" || $project["clientId"] == '' )
    • @php - $parentState = session("submenuToggle.".$prefix.'-projectSelectorlist-group-'.$project['id'], 'closed'); + $parentState = session("usersettings.submenuToggle.".$prefix.'-projectSelectorlist-group-'.$project['id'], 'closed'); @endphp @if((empty($project['children']) || count($project['children']) ==0)) diff --git a/app/Domain/Tickets/Templates/calendar.tpl.php b/app/Domain/Tickets/Templates/calendar.tpl.php index 897506588..d2f29beab 100644 --- a/app/Domain/Tickets/Templates/calendar.tpl.php +++ b/app/Domain/Tickets/Templates/calendar.tpl.php @@ -5,8 +5,8 @@ $$var = $val; // necessary for blade refactor } $milestones = $tpl->get('milestones'); -if (!session()->exists("submenuToggle.myProjectCalendarView")) { - session(["submenuToggle.myProjectCalendarView" => "dayGridMonth"]); +if (!session()->exists("usersettings.submenuToggle.myProjectCalendarView")) { + session(["usersettings.submenuToggle.myProjectCalendarView" => "dayGridMonth"]); } echo $tpl->displayNotification(); @@ -48,10 +48,10 @@ @@ -162,7 +162,7 @@ timeZone: leantime.i18n.__("usersettings.timezone"), height:heightWindow, - initialView: '', + initialView: '', events: events, editable: true, headerToolbar: false, diff --git a/app/Domain/Tickets/Templates/roadmap.tpl.php b/app/Domain/Tickets/Templates/roadmap.tpl.php index 2b02254ac..c4b1cd9ea 100644 --- a/app/Domain/Tickets/Templates/roadmap.tpl.php +++ b/app/Domain/Tickets/Templates/roadmap.tpl.php @@ -8,7 +8,7 @@ echo $tpl->displayNotification(); -$roadmapView = session("userdata.settings.views.roadmap", "Month"); +$roadmapView = session("usersettings.views.roadmap", "Month"); ?> displaySubmodule('tickets-timelineHeader') ?> diff --git a/app/Domain/Tickets/Templates/roadmapAll.tpl.php b/app/Domain/Tickets/Templates/roadmapAll.tpl.php index f0a574692..02ed0fb38 100644 --- a/app/Domain/Tickets/Templates/roadmapAll.tpl.php +++ b/app/Domain/Tickets/Templates/roadmapAll.tpl.php @@ -18,7 +18,7 @@ $htmlDropdownClients .= "
    • {$client['name']}
    • "; } -$roadmapView = session("userdata.settings.views.roadmap", "Month"); +$roadmapView = session("usersettings.views.roadmap", "Month"); ?> displaySubmodule('tickets-portfolioHeader') ?> diff --git a/app/Domain/Users/Services/Users.php b/app/Domain/Users/Services/Users.php index 539b7527a..0dd0a8bbf 100644 --- a/app/Domain/Users/Services/Users.php +++ b/app/Domain/Users/Services/Users.php @@ -162,9 +162,9 @@ public function updateUserSettings($category, $setting, $value): bool $filteredInput = htmlspecialchars($setting); $filteredValue = htmlspecialchars($value); - session(["userdata.settings.".$category.".".$filteredInput => $filteredValue]); + session(["usersettings.".$category.".".$filteredInput => $filteredValue]); - $serializeSettings = serialize(session("userdata.settings")); + $serializeSettings = serialize(session("usersettings")); return $this->userRepo->patchUser(session("userdata.id"), array("settings" => $serializeSettings)); } diff --git a/composer.json b/composer.json index 71a2791dc..3bb93592f 100644 --- a/composer.json +++ b/composer.json @@ -30,45 +30,52 @@ "ext-ldap": "*", "ext-pdo": "*", "ext-zip": "*", + "ext-fileinfo": "*", + "guzzlehttp/guzzle": "7.4.5", "aws/aws-sdk-php": "3.219.0", "phpmailer/phpmailer": "6.6.0", "robthree/twofactorauth": "1.8.2", "endroid/qr-code": "3.9.7", "league/html-to-markdown": "5.1", - "symfony/console": "^6.3", + "ramsey/uuid": "^4.3", "htmlawed/htmlawed": "1.2.6", "vlucas/phpdotenv": "^5.5", - "symfony/yaml": "^5.4", + "lasserafn/php-initial-avatar-generator": "^4.2", "guzzlehttp/oauth-subscriber": "^0.6.0", "kamermans/guzzle-oauth2-subscriber": "^1.0", "league/csv": "^9.8", + "dragonmantank/cron-expression": "^3.3", - "illuminate/container": "^9.0", - "illuminate/contracts": "^9.0", - "illuminate/view": "^9.0", - "illuminate/events": "^9.0", - "illuminate/filesystem": "^9.0", - "illuminate/bus": "^9.0", - "metasyntactical/composer-plugin-license-check": "^2.1", + "illuminate/container": "^10.0", + "illuminate/contracts": "^10.0", + "illuminate/view": "^10.0", + "illuminate/events": "^10.0", + "illuminate/filesystem": "^10.0", + "illuminate/bus": "^10.0", + "illuminate/http": "^10.0", + "illuminate/console": "^10.0", + "illuminate/pipeline": "^10.0", + "illuminate/cache": "^10.0", + "illuminate/session": "^10.0", + "illuminate/encryption": "^10.0", + "illuminate/redis": "^10.0", + "vedmant/laravel-feed-reader": "^1.6", + "symfony/http-foundation": "^6.3", "symfony/error-handler": "^6.3", - "vedmant/laravel-feed-reader": "^1.6", - "ext-fileinfo": "*", - "illuminate/http": "^9.0", - "illuminate/console": "^9.52", - "illuminate/pipeline": "^9.52", - "illuminate/cache": "^9.52", - "illuminate/session": "^9.52", - "illuminate/encryption": "^9.52", + "symfony/yaml": "^5.4", + "symfony/console": "^6.3", "symfony/cache": "^6.3", + "nikic/php-parser": "^4.17", "nesbot/carbon": "^2.72", "spatie/icalendar-generator": "^2.6", "carbon-cli/carbon-cli": "^1.2", - "illuminate/redis": "^9.52" + + "metasyntactical/composer-plugin-license-check": "^2.1" }, "require-dev": { "squizlabs/php_codesniffer": "^3.8", @@ -77,7 +84,6 @@ "codeception/module-asserts": "*", "codeception/module-db": "^3.1", "codeception/module-webdriver": "^3.2", - "spatie/laravel-ignition": "^1.6", "phpcsstandards/phpcsextra": "^1.2.1", "leantime/leantime-documentor": "dev-main", "zebra-north/phpcs-short-types": "^1.0", diff --git a/composer.lock b/composer.lock index 4dd187a42..fb7549990 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "1d11e667a65d455680c7f825be039445", + "content-hash": "d9949e2aaefa283dfae7db4af96897f9", "packages": [ { "name": "aws/aws-crt-php", @@ -207,25 +207,25 @@ }, { "name": "brick/math", - "version": "0.11.0", + "version": "0.12.1", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478" + "reference": "f510c0a40911935b77b86859eb5223d58d660df1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/0ad82ce168c82ba30d1c01ec86116ab52f589478", - "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478", + "url": "https://api.github.com/repos/brick/math/zipball/f510c0a40911935b77b86859eb5223d58d660df1", + "reference": "f510c0a40911935b77b86859eb5223d58d660df1", "shasum": "" }, "require": { - "php": "^8.0" + "php": "^8.1" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^9.0", - "vimeo/psalm": "5.0.0" + "phpunit/phpunit": "^10.1", + "vimeo/psalm": "5.16.0" }, "type": "library", "autoload": { @@ -245,12 +245,17 @@ "arithmetic", "bigdecimal", "bignum", + "bignumber", "brick", - "math" + "decimal", + "integer", + "math", + "mathematics", + "rational" ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.11.0" + "source": "https://github.com/brick/math/tree/0.12.1" }, "funding": [ { @@ -258,7 +263,7 @@ "type": "github" } ], - "time": "2023-01-15T23:15:59+00:00" + "time": "2023-11-29T23:19:16+00:00" }, { "name": "carbon-cli/carbon-cli", @@ -1303,24 +1308,24 @@ }, { "name": "illuminate/bus", - "version": "v9.52.16", + "version": "v10.48.12", "source": { "type": "git", "url": "https://github.com/illuminate/bus.git", - "reference": "4c719a19c3d8c34b2494a7206f8ffde3eff3f983" + "reference": "252e200dacaeb168675cbf1aa26dbead57492a6c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/bus/zipball/4c719a19c3d8c34b2494a7206f8ffde3eff3f983", - "reference": "4c719a19c3d8c34b2494a7206f8ffde3eff3f983", + "url": "https://api.github.com/repos/illuminate/bus/zipball/252e200dacaeb168675cbf1aa26dbead57492a6c", + "reference": "252e200dacaeb168675cbf1aa26dbead57492a6c", "shasum": "" }, "require": { - "illuminate/collections": "^9.0", - "illuminate/contracts": "^9.0", - "illuminate/pipeline": "^9.0", - "illuminate/support": "^9.0", - "php": "^8.0.2" + "illuminate/collections": "^10.0", + "illuminate/contracts": "^10.0", + "illuminate/pipeline": "^10.0", + "illuminate/support": "^10.0", + "php": "^8.1" }, "suggest": { "illuminate/queue": "Required to use closures when chaining jobs (^7.0)." @@ -1328,7 +1333,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.x-dev" + "dev-master": "10.x-dev" } }, "autoload": { @@ -1352,28 +1357,28 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-04-18T13:42:14+00:00" + "time": "2024-05-24T17:00:27+00:00" }, { "name": "illuminate/cache", - "version": "v9.52.16", + "version": "v10.48.12", "source": { "type": "git", "url": "https://github.com/illuminate/cache.git", - "reference": "72532b4bc11aaf61610dc5f7b315f65c5d6d9cf7" + "reference": "6020bc5f40b62cc680be3eb57e980e5cb26884ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/cache/zipball/72532b4bc11aaf61610dc5f7b315f65c5d6d9cf7", - "reference": "72532b4bc11aaf61610dc5f7b315f65c5d6d9cf7", + "url": "https://api.github.com/repos/illuminate/cache/zipball/6020bc5f40b62cc680be3eb57e980e5cb26884ff", + "reference": "6020bc5f40b62cc680be3eb57e980e5cb26884ff", "shasum": "" }, "require": { - "illuminate/collections": "^9.0", - "illuminate/contracts": "^9.0", - "illuminate/macroable": "^9.0", - "illuminate/support": "^9.0", - "php": "^8.0.2" + "illuminate/collections": "^10.0", + "illuminate/contracts": "^10.0", + "illuminate/macroable": "^10.0", + "illuminate/support": "^10.0", + "php": "^8.1" }, "provide": { "psr/simple-cache-implementation": "1.0|2.0|3.0" @@ -1382,15 +1387,15 @@ "ext-apcu": "Required to use the APC cache driver.", "ext-filter": "Required to use the DynamoDb cache driver.", "ext-memcached": "Required to use the memcache cache driver.", - "illuminate/database": "Required to use the database cache driver (^9.0).", - "illuminate/filesystem": "Required to use the file cache driver (^9.0).", - "illuminate/redis": "Required to use the redis cache driver (^9.0).", - "symfony/cache": "Required to use PSR-6 cache bridge (^6.0)." + "illuminate/database": "Required to use the database cache driver (^10.0).", + "illuminate/filesystem": "Required to use the file cache driver (^10.0).", + "illuminate/redis": "Required to use the redis cache driver (^10.0).", + "symfony/cache": "Required to use PSR-6 cache bridge (^6.2)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "9.x-dev" + "dev-master": "10.x-dev" } }, "autoload": { @@ -1414,35 +1419,35 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-06-01T16:09:55+00:00" + "time": "2024-05-23T18:38:25+00:00" }, { "name": "illuminate/collections", - "version": "v9.52.16", + "version": "v10.48.12", "source": { "type": "git", "url": "https://github.com/illuminate/collections.git", - "reference": "d3710b0b244bfc62c288c1a87eaa62dd28352d1f" + "reference": "f9589f1063a449111dcaa1d68285b507d9483a95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/collections/zipball/d3710b0b244bfc62c288c1a87eaa62dd28352d1f", - "reference": "d3710b0b244bfc62c288c1a87eaa62dd28352d1f", + "url": "https://api.github.com/repos/illuminate/collections/zipball/f9589f1063a449111dcaa1d68285b507d9483a95", + "reference": "f9589f1063a449111dcaa1d68285b507d9483a95", "shasum": "" }, "require": { - "illuminate/conditionable": "^9.0", - "illuminate/contracts": "^9.0", - "illuminate/macroable": "^9.0", - "php": "^8.0.2" + "illuminate/conditionable": "^10.0", + "illuminate/contracts": "^10.0", + "illuminate/macroable": "^10.0", + "php": "^8.1" }, "suggest": { - "symfony/var-dumper": "Required to use the dump method (^6.0)." + "symfony/var-dumper": "Required to use the dump method (^6.2)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "9.x-dev" + "dev-master": "10.x-dev" } }, "autoload": { @@ -1469,20 +1474,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-06-11T21:17:10+00:00" + "time": "2024-03-20T20:09:13+00:00" }, { "name": "illuminate/conditionable", - "version": "v9.52.16", + "version": "v10.48.12", "source": { "type": "git", "url": "https://github.com/illuminate/conditionable.git", - "reference": "bea24daa0fa84b7e7b0d5b84f62c71b7e2dc3364" + "reference": "d0958e4741fc9d6f516a552060fd1b829a85e009" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/conditionable/zipball/bea24daa0fa84b7e7b0d5b84f62c71b7e2dc3364", - "reference": "bea24daa0fa84b7e7b0d5b84f62c71b7e2dc3364", + "url": "https://api.github.com/repos/illuminate/conditionable/zipball/d0958e4741fc9d6f516a552060fd1b829a85e009", + "reference": "d0958e4741fc9d6f516a552060fd1b829a85e009", "shasum": "" }, "require": { @@ -1491,7 +1496,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.x-dev" + "dev-master": "10.x-dev" } }, "autoload": { @@ -1515,47 +1520,48 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-02-01T21:42:32+00:00" + "time": "2023-02-03T08:06:17+00:00" }, { "name": "illuminate/console", - "version": "v9.52.16", + "version": "v10.48.12", "source": { "type": "git", "url": "https://github.com/illuminate/console.git", - "reference": "c794b268b9fd3c2a535c766c011fb574e51b071e" + "reference": "d001036218ea5fbb382ee5c845292b067ea8b46f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/console/zipball/c794b268b9fd3c2a535c766c011fb574e51b071e", - "reference": "c794b268b9fd3c2a535c766c011fb574e51b071e", + "url": "https://api.github.com/repos/illuminate/console/zipball/d001036218ea5fbb382ee5c845292b067ea8b46f", + "reference": "d001036218ea5fbb382ee5c845292b067ea8b46f", "shasum": "" }, "require": { "ext-mbstring": "*", - "illuminate/collections": "^9.0", - "illuminate/contracts": "^9.0", - "illuminate/macroable": "^9.0", - "illuminate/support": "^9.0", - "illuminate/view": "^9.0", + "illuminate/collections": "^10.0", + "illuminate/contracts": "^10.0", + "illuminate/macroable": "^10.0", + "illuminate/support": "^10.0", + "illuminate/view": "^10.0", + "laravel/prompts": "^0.1.9", "nunomaduro/termwind": "^1.13", - "php": "^8.0.2", - "symfony/console": "^6.0.9", - "symfony/process": "^6.0" + "php": "^8.1", + "symfony/console": "^6.2", + "symfony/process": "^6.2" }, "suggest": { "dragonmantank/cron-expression": "Required to use scheduler (^3.3.2).", "ext-pcntl": "Required to use signal trapping.", "guzzlehttp/guzzle": "Required to use the ping methods on schedules (^7.5).", - "illuminate/bus": "Required to use the scheduled job dispatcher (^9.0).", - "illuminate/container": "Required to use the scheduler (^9.0).", - "illuminate/filesystem": "Required to use the generator command (^9.0).", - "illuminate/queue": "Required to use closures for scheduled jobs (^9.0)." + "illuminate/bus": "Required to use the scheduled job dispatcher (^10.0).", + "illuminate/container": "Required to use the scheduler (^10.0).", + "illuminate/filesystem": "Required to use the generator command (^10.0).", + "illuminate/queue": "Required to use closures for scheduled jobs (^10.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "9.x-dev" + "dev-master": "10.x-dev" } }, "autoload": { @@ -1579,25 +1585,25 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-06-07T17:21:24+00:00" + "time": "2024-03-21T13:10:17+00:00" }, { "name": "illuminate/container", - "version": "v9.52.16", + "version": "v10.48.12", "source": { "type": "git", "url": "https://github.com/illuminate/container.git", - "reference": "1641dda2d0750b68bb1264a3b37ff3973f2e6265" + "reference": "ddc26273085fad3c471b2602ad820e0097ff7939" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/container/zipball/1641dda2d0750b68bb1264a3b37ff3973f2e6265", - "reference": "1641dda2d0750b68bb1264a3b37ff3973f2e6265", + "url": "https://api.github.com/repos/illuminate/container/zipball/ddc26273085fad3c471b2602ad820e0097ff7939", + "reference": "ddc26273085fad3c471b2602ad820e0097ff7939", "shasum": "" }, "require": { - "illuminate/contracts": "^9.0", - "php": "^8.0.2", + "illuminate/contracts": "^10.0", + "php": "^8.1", "psr/container": "^1.1.1|^2.0.1" }, "provide": { @@ -1606,7 +1612,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.x-dev" + "dev-master": "10.x-dev" } }, "autoload": { @@ -1630,31 +1636,31 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-01-24T16:54:18+00:00" + "time": "2023-06-18T09:12:03+00:00" }, { "name": "illuminate/contracts", - "version": "v9.52.16", + "version": "v10.48.12", "source": { "type": "git", "url": "https://github.com/illuminate/contracts.git", - "reference": "44f65d723b13823baa02ff69751a5948bde60c22" + "reference": "8d7152c4a1f5d9cf7da3e8b71f23e4556f6138ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/contracts/zipball/44f65d723b13823baa02ff69751a5948bde60c22", - "reference": "44f65d723b13823baa02ff69751a5948bde60c22", + "url": "https://api.github.com/repos/illuminate/contracts/zipball/8d7152c4a1f5d9cf7da3e8b71f23e4556f6138ac", + "reference": "8d7152c4a1f5d9cf7da3e8b71f23e4556f6138ac", "shasum": "" }, "require": { - "php": "^8.0.2", + "php": "^8.1", "psr/container": "^1.1.1|^2.0.1", "psr/simple-cache": "^1.0|^2.0|^3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "9.x-dev" + "dev-master": "10.x-dev" } }, "autoload": { @@ -1678,34 +1684,34 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-02-08T14:36:30+00:00" + "time": "2024-01-15T18:52:32+00:00" }, { "name": "illuminate/encryption", - "version": "v9.52.16", + "version": "v10.48.12", "source": { "type": "git", "url": "https://github.com/illuminate/encryption.git", - "reference": "7a98368efdb7abc54287b5abd4561d77eafc7de1" + "reference": "0ab9942a891f82f927d03abb9a7320b89262f2a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/encryption/zipball/7a98368efdb7abc54287b5abd4561d77eafc7de1", - "reference": "7a98368efdb7abc54287b5abd4561d77eafc7de1", + "url": "https://api.github.com/repos/illuminate/encryption/zipball/0ab9942a891f82f927d03abb9a7320b89262f2a2", + "reference": "0ab9942a891f82f927d03abb9a7320b89262f2a2", "shasum": "" }, "require": { "ext-hash": "*", "ext-mbstring": "*", "ext-openssl": "*", - "illuminate/contracts": "^9.0", - "illuminate/support": "^9.0", - "php": "^8.0.2" + "illuminate/contracts": "^10.0", + "illuminate/support": "^10.0", + "php": "^8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "9.x-dev" + "dev-master": "10.x-dev" } }, "autoload": { @@ -1729,35 +1735,35 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-02-06T02:52:41+00:00" + "time": "2023-11-21T16:21:31+00:00" }, { "name": "illuminate/events", - "version": "v9.52.16", + "version": "v10.48.12", "source": { "type": "git", "url": "https://github.com/illuminate/events.git", - "reference": "8e534676bac23bc17925f5c74c128f9c09b98f69" + "reference": "a931bfa88edc6ac52c9abbfd7b769343d321d3eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/events/zipball/8e534676bac23bc17925f5c74c128f9c09b98f69", - "reference": "8e534676bac23bc17925f5c74c128f9c09b98f69", + "url": "https://api.github.com/repos/illuminate/events/zipball/a931bfa88edc6ac52c9abbfd7b769343d321d3eb", + "reference": "a931bfa88edc6ac52c9abbfd7b769343d321d3eb", "shasum": "" }, "require": { - "illuminate/bus": "^9.0", - "illuminate/collections": "^9.0", - "illuminate/container": "^9.0", - "illuminate/contracts": "^9.0", - "illuminate/macroable": "^9.0", - "illuminate/support": "^9.0", - "php": "^8.0.2" + "illuminate/bus": "^10.0", + "illuminate/collections": "^10.0", + "illuminate/container": "^10.0", + "illuminate/contracts": "^10.0", + "illuminate/macroable": "^10.0", + "illuminate/support": "^10.0", + "php": "^8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "9.x-dev" + "dev-master": "10.x-dev" } }, "autoload": { @@ -1784,29 +1790,29 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2022-09-15T13:14:12+00:00" + "time": "2024-03-04T14:41:04+00:00" }, { "name": "illuminate/filesystem", - "version": "v9.52.16", + "version": "v10.48.12", "source": { "type": "git", "url": "https://github.com/illuminate/filesystem.git", - "reference": "8168361548b2c5e2e501096cfbadb62a4a526290" + "reference": "592fb581a52fba43bf78c2e4b22db540c9f9f149" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/filesystem/zipball/8168361548b2c5e2e501096cfbadb62a4a526290", - "reference": "8168361548b2c5e2e501096cfbadb62a4a526290", + "url": "https://api.github.com/repos/illuminate/filesystem/zipball/592fb581a52fba43bf78c2e4b22db540c9f9f149", + "reference": "592fb581a52fba43bf78c2e4b22db540c9f9f149", "shasum": "" }, "require": { - "illuminate/collections": "^9.0", - "illuminate/contracts": "^9.0", - "illuminate/macroable": "^9.0", - "illuminate/support": "^9.0", - "php": "^8.0.2", - "symfony/finder": "^6.0" + "illuminate/collections": "^10.0", + "illuminate/contracts": "^10.0", + "illuminate/macroable": "^10.0", + "illuminate/support": "^10.0", + "php": "^8.1", + "symfony/finder": "^6.2" }, "suggest": { "ext-fileinfo": "Required to use the Filesystem class.", @@ -1818,16 +1824,19 @@ "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", - "symfony/filesystem": "Required to enable support for relative symbolic links (^6.0).", - "symfony/mime": "Required to enable support for guessing extensions (^6.0)." + "symfony/filesystem": "Required to enable support for relative symbolic links (^6.2).", + "symfony/mime": "Required to enable support for guessing extensions (^6.2)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "9.x-dev" + "dev-master": "10.x-dev" } }, "autoload": { + "files": [ + "functions.php" + ], "psr-4": { "Illuminate\\Filesystem\\": "" } @@ -1848,34 +1857,34 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-02-10T20:24:35+00:00" + "time": "2024-03-11T21:45:53+00:00" }, { "name": "illuminate/http", - "version": "v9.52.16", + "version": "v10.48.12", "source": { "type": "git", "url": "https://github.com/illuminate/http.git", - "reference": "774bc656007506a31f15bb420ba41be6abe49c75" + "reference": "0dd2ee794017c7f5e811cf8fb0dc74c646918d30" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/http/zipball/774bc656007506a31f15bb420ba41be6abe49c75", - "reference": "774bc656007506a31f15bb420ba41be6abe49c75", + "url": "https://api.github.com/repos/illuminate/http/zipball/0dd2ee794017c7f5e811cf8fb0dc74c646918d30", + "reference": "0dd2ee794017c7f5e811cf8fb0dc74c646918d30", "shasum": "" }, "require": { "ext-filter": "*", "fruitcake/php-cors": "^1.2", "guzzlehttp/uri-template": "^1.0", - "illuminate/collections": "^9.0", - "illuminate/macroable": "^9.0", - "illuminate/session": "^9.0", - "illuminate/support": "^9.0", - "php": "^8.0.2", - "symfony/http-foundation": "^6.0", - "symfony/http-kernel": "^6.0", - "symfony/mime": "^6.0" + "illuminate/collections": "^10.0", + "illuminate/macroable": "^10.0", + "illuminate/session": "^10.0", + "illuminate/support": "^10.0", + "php": "^8.1", + "symfony/http-foundation": "^6.4", + "symfony/http-kernel": "^6.2", + "symfony/mime": "^6.2" }, "suggest": { "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", @@ -1884,7 +1893,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.x-dev" + "dev-master": "10.x-dev" } }, "autoload": { @@ -1908,29 +1917,29 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-08-01T13:44:50+00:00" + "time": "2024-02-21T15:19:17+00:00" }, { "name": "illuminate/macroable", - "version": "v9.52.16", + "version": "v10.48.12", "source": { "type": "git", "url": "https://github.com/illuminate/macroable.git", - "reference": "e3bfaf6401742a9c6abca61b9b10e998e5b6449a" + "reference": "dff667a46ac37b634dcf68909d9d41e94dc97c27" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/macroable/zipball/e3bfaf6401742a9c6abca61b9b10e998e5b6449a", - "reference": "e3bfaf6401742a9c6abca61b9b10e998e5b6449a", + "url": "https://api.github.com/repos/illuminate/macroable/zipball/dff667a46ac37b634dcf68909d9d41e94dc97c27", + "reference": "dff667a46ac37b634dcf68909d9d41e94dc97c27", "shasum": "" }, "require": { - "php": "^8.0.2" + "php": "^8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "9.x-dev" + "dev-master": "10.x-dev" } }, "autoload": { @@ -1954,31 +1963,31 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2022-08-09T13:29:29+00:00" + "time": "2023-06-05T12:46:42+00:00" }, { "name": "illuminate/pipeline", - "version": "v9.52.16", + "version": "v10.48.12", "source": { "type": "git", "url": "https://github.com/illuminate/pipeline.git", - "reference": "e0be3f3f79f8235ad7334919ca4094d5074e02f6" + "reference": "f802187e917a171332cc90f8c1a102939c57405d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/pipeline/zipball/e0be3f3f79f8235ad7334919ca4094d5074e02f6", - "reference": "e0be3f3f79f8235ad7334919ca4094d5074e02f6", + "url": "https://api.github.com/repos/illuminate/pipeline/zipball/f802187e917a171332cc90f8c1a102939c57405d", + "reference": "f802187e917a171332cc90f8c1a102939c57405d", "shasum": "" }, "require": { - "illuminate/contracts": "^9.0", - "illuminate/support": "^9.0", - "php": "^8.0.2" + "illuminate/contracts": "^10.0", + "illuminate/support": "^10.0", + "php": "^8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "9.x-dev" + "dev-master": "10.x-dev" } }, "autoload": { @@ -2002,37 +2011,37 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2022-06-09T14:13:53+00:00" + "time": "2023-12-19T14:47:26+00:00" }, { "name": "illuminate/redis", - "version": "v9.52.16", + "version": "v10.48.12", "source": { "type": "git", "url": "https://github.com/illuminate/redis.git", - "reference": "d4702b8d6a64a48cfab7259248ecbecf3b6135e2" + "reference": "8a438aa70f4bf48973dfe8de9af3ad91cc5361a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/redis/zipball/d4702b8d6a64a48cfab7259248ecbecf3b6135e2", - "reference": "d4702b8d6a64a48cfab7259248ecbecf3b6135e2", + "url": "https://api.github.com/repos/illuminate/redis/zipball/8a438aa70f4bf48973dfe8de9af3ad91cc5361a7", + "reference": "8a438aa70f4bf48973dfe8de9af3ad91cc5361a7", "shasum": "" }, "require": { - "illuminate/collections": "^9.0", - "illuminate/contracts": "^9.0", - "illuminate/macroable": "^9.0", - "illuminate/support": "^9.0", - "php": "^8.0.2" + "illuminate/collections": "^10.0", + "illuminate/contracts": "^10.0", + "illuminate/macroable": "^10.0", + "illuminate/support": "^10.0", + "php": "^8.1" }, "suggest": { "ext-redis": "Required to use the phpredis connector (^4.0|^5.0).", - "predis/predis": "Required to use the predis connector (^1.1.9|^2.0.2)." + "predis/predis": "Required to use the predis connector (^2.0.2)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "9.x-dev" + "dev-master": "10.x-dev" } }, "autoload": { @@ -2056,40 +2065,40 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-07-31T15:01:27+00:00" + "time": "2024-01-03T14:02:53+00:00" }, { "name": "illuminate/session", - "version": "v9.52.16", + "version": "v10.48.12", "source": { "type": "git", "url": "https://github.com/illuminate/session.git", - "reference": "8802ba84048b7c779872361ce521226c260bc2ef" + "reference": "a095707b83327e27ba292c9c4d2413888b1f517c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/session/zipball/8802ba84048b7c779872361ce521226c260bc2ef", - "reference": "8802ba84048b7c779872361ce521226c260bc2ef", + "url": "https://api.github.com/repos/illuminate/session/zipball/a095707b83327e27ba292c9c4d2413888b1f517c", + "reference": "a095707b83327e27ba292c9c4d2413888b1f517c", "shasum": "" }, "require": { "ext-ctype": "*", "ext-session": "*", - "illuminate/collections": "^9.0", - "illuminate/contracts": "^9.0", - "illuminate/filesystem": "^9.0", - "illuminate/support": "^9.0", - "php": "^8.0.2", - "symfony/finder": "^6.0", - "symfony/http-foundation": "^6.0" + "illuminate/collections": "^10.0", + "illuminate/contracts": "^10.0", + "illuminate/filesystem": "^10.0", + "illuminate/support": "^10.0", + "php": "^8.1", + "symfony/finder": "^6.2", + "symfony/http-foundation": "^6.4" }, "suggest": { - "illuminate/console": "Required to use the session:table command (^9.0)." + "illuminate/console": "Required to use the session:table command (^10.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "9.x-dev" + "dev-master": "10.x-dev" } }, "autoload": { @@ -2113,20 +2122,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-05-04T14:53:51+00:00" + "time": "2023-12-29T21:53:12+00:00" }, { "name": "illuminate/support", - "version": "v9.52.16", + "version": "v10.48.12", "source": { "type": "git", "url": "https://github.com/illuminate/support.git", - "reference": "223c608dbca27232df6213f776bfe7bdeec24874" + "reference": "263f389d81488c237846b69469f91387ca2729f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/support/zipball/223c608dbca27232df6213f776bfe7bdeec24874", - "reference": "223c608dbca27232df6213f776bfe7bdeec24874", + "url": "https://api.github.com/repos/illuminate/support/zipball/263f389d81488c237846b69469f91387ca2729f3", + "reference": "263f389d81488c237846b69469f91387ca2729f3", "shasum": "" }, "require": { @@ -2134,30 +2143,30 @@ "ext-ctype": "*", "ext-filter": "*", "ext-mbstring": "*", - "illuminate/collections": "^9.0", - "illuminate/conditionable": "^9.0", - "illuminate/contracts": "^9.0", - "illuminate/macroable": "^9.0", - "nesbot/carbon": "^2.62.1", - "php": "^8.0.2", + "illuminate/collections": "^10.0", + "illuminate/conditionable": "^10.0", + "illuminate/contracts": "^10.0", + "illuminate/macroable": "^10.0", + "nesbot/carbon": "^2.67", + "php": "^8.1", "voku/portable-ascii": "^2.0" }, "conflict": { "tightenco/collect": "<5.5.33" }, "suggest": { - "illuminate/filesystem": "Required to use the composer class (^9.0).", + "illuminate/filesystem": "Required to use the composer class (^10.0).", "league/commonmark": "Required to use Str::markdown() and Stringable::markdown() (^2.0.2).", "ramsey/uuid": "Required to use Str::uuid() (^4.7).", - "symfony/process": "Required to use the composer class (^6.0).", - "symfony/uid": "Required to use Str::ulid() (^6.0).", - "symfony/var-dumper": "Required to use the dd function (^6.0).", + "symfony/process": "Required to use the composer class (^6.2).", + "symfony/uid": "Required to use Str::ulid() (^6.2).", + "symfony/var-dumper": "Required to use the dd function (^6.2).", "vlucas/phpdotenv": "Required to use the Env class and env helper (^5.4.1)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "9.x-dev" + "dev-master": "10.x-dev" } }, "autoload": { @@ -2184,37 +2193,37 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-06-11T21:11:53+00:00" + "time": "2024-05-16T21:33:51+00:00" }, { "name": "illuminate/view", - "version": "v9.52.16", + "version": "v10.48.12", "source": { "type": "git", "url": "https://github.com/illuminate/view.git", - "reference": "0215165781b3269cdbecdfe63ffddd0e6cecfd6e" + "reference": "76a1405bc3e1d0a19e8d2db3bd5b991ed10b31f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/view/zipball/0215165781b3269cdbecdfe63ffddd0e6cecfd6e", - "reference": "0215165781b3269cdbecdfe63ffddd0e6cecfd6e", + "url": "https://api.github.com/repos/illuminate/view/zipball/76a1405bc3e1d0a19e8d2db3bd5b991ed10b31f7", + "reference": "76a1405bc3e1d0a19e8d2db3bd5b991ed10b31f7", "shasum": "" }, "require": { "ext-tokenizer": "*", - "illuminate/collections": "^9.0", - "illuminate/container": "^9.0", - "illuminate/contracts": "^9.0", - "illuminate/events": "^9.0", - "illuminate/filesystem": "^9.0", - "illuminate/macroable": "^9.0", - "illuminate/support": "^9.0", - "php": "^8.0.2" + "illuminate/collections": "^10.0", + "illuminate/container": "^10.0", + "illuminate/contracts": "^10.0", + "illuminate/events": "^10.0", + "illuminate/filesystem": "^10.0", + "illuminate/macroable": "^10.0", + "illuminate/support": "^10.0", + "php": "^8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "9.x-dev" + "dev-master": "10.x-dev" } }, "autoload": { @@ -2238,7 +2247,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-03-13T01:21:46+00:00" + "time": "2024-05-21T17:37:01+00:00" }, { "name": "intervention/image", @@ -2428,6 +2437,64 @@ }, "time": "2022-06-29T09:25:13+00:00" }, + { + "name": "laravel/prompts", + "version": "v0.1.23", + "source": { + "type": "git", + "url": "https://github.com/laravel/prompts.git", + "reference": "9bc4df7c699b0452c6b815e64a2d84b6d7f99400" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/prompts/zipball/9bc4df7c699b0452c6b815e64a2d84b6d7f99400", + "reference": "9bc4df7c699b0452c6b815e64a2d84b6d7f99400", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "illuminate/collections": "^10.0|^11.0", + "php": "^8.1", + "symfony/console": "^6.2|^7.0" + }, + "conflict": { + "illuminate/console": ">=10.17.0 <10.25.0", + "laravel/framework": ">=10.17.0 <10.25.0" + }, + "require-dev": { + "mockery/mockery": "^1.5", + "pestphp/pest": "^2.3", + "phpstan/phpstan": "^1.11", + "phpstan/phpstan-mockery": "^1.1" + }, + "suggest": { + "ext-pcntl": "Required for the spinner to be animated." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.1.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Laravel\\Prompts\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Add beautiful and user-friendly forms to your command-line applications.", + "support": { + "issues": "https://github.com/laravel/prompts/issues", + "source": "https://github.com/laravel/prompts/tree/v0.1.23" + }, + "time": "2024-05-27T13:53:20+00:00" + }, { "name": "lasserafn/php-initial-avatar-generator", "version": "4.3", @@ -6748,34 +6815,32 @@ }, { "name": "symfony/var-dumper", - "version": "v6.4.8", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "ad23ca4312395f0a8a8633c831ef4c4ee542ed25" + "reference": "deb2c2b506ff6fdbb340e00b34e9901e1605f293" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ad23ca4312395f0a8a8633c831ef4c4ee542ed25", - "reference": "ad23ca4312395f0a8a8633c831ef4c4ee542ed25", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/deb2c2b506ff6fdbb340e00b34e9901e1605f293", + "reference": "deb2c2b506ff6fdbb340e00b34e9901e1605f293", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/console": "<5.4" + "symfony/console": "<6.4" }, "require-dev": { "ext-iconv": "*", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/error-handler": "^6.3|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/uid": "^5.4|^6.0|^7.0", - "twig/twig": "^2.13|^3.0.4" + "symfony/console": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/uid": "^6.4|^7.0", + "twig/twig": "^3.0.4" }, "bin": [ "Resources/bin/var-dump-server" @@ -6813,7 +6878,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.8" + "source": "https://github.com/symfony/var-dumper/tree/v7.1.1" }, "funding": [ { @@ -6829,7 +6894,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/var-exporter", @@ -8232,108 +8297,6 @@ }, "time": "2024-03-31T07:05:07+00:00" }, - { - "name": "monolog/monolog", - "version": "2.9.3", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "a30bfe2e142720dfa990d0a7e573997f5d884215" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/a30bfe2e142720dfa990d0a7e573997f5d884215", - "reference": "a30bfe2e142720dfa990d0a7e573997f5d884215", - "shasum": "" - }, - "require": { - "php": ">=7.2", - "psr/log": "^1.0.1 || ^2.0 || ^3.0" - }, - "provide": { - "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" - }, - "require-dev": { - "aws/aws-sdk-php": "^2.4.9 || ^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", - "guzzlehttp/psr7": "^2.2", - "mongodb/mongodb": "^1.8", - "php-amqplib/php-amqplib": "~2.4 || ^3", - "phpspec/prophecy": "^1.15", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^8.5.38 || ^9.6.19", - "predis/predis": "^1.1 || ^2.0", - "rollbar/rollbar": "^1.3 || ^2 || ^3", - "ruflin/elastica": "^7", - "swiftmailer/swiftmailer": "^5.3|^6.0", - "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": "2.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/2.9.3" - }, - "funding": [ - { - "url": "https://github.com/Seldaek", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", - "type": "tidelift" - } - ], - "time": "2024-04-12T20:52:51+00:00" - }, { "name": "myclabs/deep-copy", "version": "1.11.1", @@ -10543,311 +10506,6 @@ ], "time": "2020-09-28T06:39:44+00:00" }, - { - "name": "spatie/backtrace", - "version": "1.6.1", - "source": { - "type": "git", - "url": "https://github.com/spatie/backtrace.git", - "reference": "8373b9d51638292e3bfd736a9c19a654111b4a23" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/backtrace/zipball/8373b9d51638292e3bfd736a9c19a654111b4a23", - "reference": "8373b9d51638292e3bfd736a9c19a654111b4a23", - "shasum": "" - }, - "require": { - "php": "^7.3|^8.0" - }, - "require-dev": { - "ext-json": "*", - "laravel/serializable-closure": "^1.3", - "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.6.1" - }, - "funding": [ - { - "url": "https://github.com/sponsors/spatie", - "type": "github" - }, - { - "url": "https://spatie.be/open-source/support-us", - "type": "other" - } - ], - "time": "2024-04-24T13:22:11+00:00" - }, - { - "name": "spatie/flare-client-php", - "version": "1.6.0", - "source": { - "type": "git", - "url": "https://github.com/spatie/flare-client-php.git", - "reference": "220a7c8745e9fa427d54099f47147c4b97fe6462" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/220a7c8745e9fa427d54099f47147c4b97fe6462", - "reference": "220a7c8745e9fa427d54099f47147c4b97fe6462", - "shasum": "" - }, - "require": { - "illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0", - "php": "^8.0", - "spatie/backtrace": "^1.5.2", - "symfony/http-foundation": "^5.2|^6.0|^7.0", - "symfony/mime": "^5.2|^6.0|^7.0", - "symfony/process": "^5.2|^6.0|^7.0", - "symfony/var-dumper": "^5.2|^6.0|^7.0" - }, - "require-dev": { - "dms/phpunit-arraysubset-asserts": "^0.5.0", - "pestphp/pest": "^1.20|^2.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1.0", - "spatie/phpunit-snapshot-assertions": "^4.0|^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.3.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.6.0" - }, - "funding": [ - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2024-05-22T09:45:39+00:00" - }, - { - "name": "spatie/ignition", - "version": "1.14.2", - "source": { - "type": "git", - "url": "https://github.com/spatie/ignition.git", - "reference": "5e11c11f675bb5251f061491a493e04a1a571532" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/ignition/zipball/5e11c11f675bb5251f061491a493e04a1a571532", - "reference": "5e11c11f675bb5251f061491a493e04a1a571532", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-mbstring": "*", - "php": "^8.0", - "spatie/backtrace": "^1.5.3", - "spatie/flare-client-php": "^1.4.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" - }, - "require-dev": { - "illuminate/cache": "^9.52|^10.0|^11.0", - "mockery/mockery": "^1.4", - "pestphp/pest": "^1.20|^2.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1.0", - "psr/simple-cache-implementation": "*", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "vlucas/phpdotenv": "^5.5" - }, - "suggest": { - "openai-php/client": "Require get solutions from OpenAI", - "simple-cache-implementation": "To cache solutions from OpenAI" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.5.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": "2024-05-29T08:10:20+00:00" - }, - { - "name": "spatie/laravel-ignition", - "version": "1.6.4", - "source": { - "type": "git", - "url": "https://github.com/spatie/laravel-ignition.git", - "reference": "1a2b4bd3d48c72526c0ba417687e5c56b5cf49bc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/1a2b4bd3d48c72526c0ba417687e5c56b5cf49bc", - "reference": "1a2b4bd3d48c72526c0ba417687e5c56b5cf49bc", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "ext-json": "*", - "ext-mbstring": "*", - "illuminate/support": "^8.77|^9.27", - "monolog/monolog": "^2.3", - "php": "^8.0", - "spatie/flare-client-php": "^1.0.1", - "spatie/ignition": "^1.4.1", - "symfony/console": "^5.0|^6.0", - "symfony/var-dumper": "^5.0|^6.0" - }, - "require-dev": { - "filp/whoops": "^2.14", - "livewire/livewire": "^2.8|dev-develop", - "mockery/mockery": "^1.4", - "nunomaduro/larastan": "^1.0", - "orchestra/testbench": "^6.23|^7.0", - "pestphp/pest": "^1.20", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1.0", - "spatie/laravel-ray": "^1.27" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Spatie\\LaravelIgnition\\IgnitionServiceProvider" - ], - "aliases": { - "Flare": "Spatie\\LaravelIgnition\\Facades\\Flare" - } - } - }, - "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-03T19:28:04+00:00" - }, { "name": "squizlabs/php_codesniffer", "version": "3.10.1",