]> _ Git - fluidbook-toolbox.git/commitdiff
wip #6693 @1
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Tue, 30 Jan 2024 10:43:03 +0000 (11:43 +0100)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Tue, 30 Jan 2024 10:43:03 +0000 (11:43 +0100)
app/Http/Controllers/Admin/Operations/Tools/DockerWebContainer.php
composer.lock

index ed229834f4e88829f8c34e4c025da2976cc1cc5a..250f6601d72c9a2a947cee7fc572f49f8504ef90 100644 (file)
@@ -55,162 +55,187 @@ trait DockerWebContainer
     public function dodockerwebcontainer()
     {
         $request = request();
-        $name = Str::slug($request->get('containername', 'containername'));
 
-        $envs = $request->get('env', ['production']);
+        $tmp = Files::mkdir(Files::tmpdir());
 
-        $tmp = Files::tmpdir();
+        $name = Str::slug($request->get('containername', 'containername'));
         $notification = __('Le container web :name a été crée avec les informations suivantes', ['name' => $name]) . " : \n\n";
+        $envs = $request->get('env', ['production']);
 
         foreach ($envs as $k => $env) {
-            $domain = $request->get('domain', '');
-
-            $notification .= '---- Environnement : ' . $env . " ----\n\n";
-            $subDomain = $env === 'production' ? (substr_count($domain, '.') >= 2 ? '' : 'www.') : $env . '.';
             $dockerSuffix = $env === 'production' ? '' : '-' . $env;
-
-            if (count($envs) === 1) {
-                $subDomain = '';
+            $dir = $this->_createEnv($env, $name, $dockerSuffix, $notification);
+            $fdir = $tmp . $name . $dockerSuffix;
+            if ($k === 0) {
+                `mv $dir $tmp`;
+                $firstDir = $fdir;
+                continue;
             }
+            `mv $dir/www/.docker/$env $firstDir/www/.docker/`;
+            rename($dir . '/www/.env.' . $env, $firstDir . '/www/.env.' . $env);
+            $fdir = Files::mkdir($fdir);
+            `cp -r $firstDir/www $fdir`;
+            copy($dir . '/update', $fdir . 'update');
+        }
 
-            $laravel = $request->get('laravel', true);
-
-            $variables = [
-                '$user' => $name,
-                '$name' => $name . $dockerSuffix,
-                '$matomodbpassword' => Str::random(16),
-                '$sshport' => rand(10000, 60000),
-                '$domain' => $domain,
-                '$dbpassword' => Str::random(16),
-                '$phpfpmimage' => 'php-fpm',
-                '$locale' => 'fr_FR',
-                '$localeshort' => 'fr',
-                '$sshpassword' => Str::random(16),
-                '$public' => ($laravel || $request->get('public')) ? '/public' : '/',
-                '$environment' => $env,
-            ];
+        $tmpfile = Files::tempnam() . '.zip';
+        Zip::archive($tmp, $tmpfile);
+        Files::rmdir($tmp);
 
-            if (!$variables['$domain']) {
-                $variables['$domain'] = $name . '.dev.cubedesigners.com';
-            }
-            $fixRights = [];
-            $variables['$domain'] = $subDomain . $variables['$domain'];
-
-            $dir = Files::mkdir($tmp . '/' . $name . $dockerSuffix);
-            $www = $dir . 'www';
-            $source = resource_path('tools/dockerwebcontainer/template');
-            `cp -r $source/* $dir/`;
-
-            $additionalEnv = [];
-
-            $compose = ['base'];
-            $variables['$phpversion'] = $request->get('phpversion', '8.3');
-            if ($variables['$phpversion'] !== 'none') {
-                $compose[] = 'php';
-                if (version_compare($variables['$phpversion'], '5.6', '<=')) {
-                    $variables['$phpfpmimage'] = 'php-' . $variables['$phpversion'] . '-fpm';
-                }
-                $fixRights[] = 'chown 0:0 ./config/cron/crontab';
-            }
-            if ($laravel || $request->get('mysql', true)) {
-                $compose[] = 'mysql';
-                $fixRights[] = 'chown -R 999:999 ./database/data';
-
-                $additionalEnv['DB_CONNECTION'] = 'mysql';
-                $additionalEnv['DB_HOST'] = '$name-mariadb';
-                $additionalEnv['DB_PORT'] = '3306';
-                $additionalEnv['DB_DATABASE'] = '$name';
-                $additionalEnv['DB_USERNAME'] = 'root';
-                $additionalEnv['DB_PASSWORD'] = '$dbpassword';
-            }
-            if ($laravel || $request->get('redis', true)) {
-                $compose[] = 'redis';
-                $fixRights[] = 'chown -R 999:999 ./redis';
-                $additionalEnv['CACHE_DRIVER'] = 'redis';
-                $additionalEnv['SESSION_DRIVER'] = 'redis';
-                $additionalEnv['REDIS_HOST'] = '$name-redis';
-            }
-            if ($request->get('matomo', true)) {
-                $compose[] = 'matomo';
-            }
-            if ($request->get('elasticsearch', false)) {
-                $compose[] = 'elasticsearch';
-                $fixRights[] = 'chmod -R 777 ./esdata';
-            }
+        $res = response()->download($tmpfile, $name . '.zip')->deleteFileAfterSend(true);
+        backpack_user()->notify(new ToolboxNotification(__('Container :name web prêt', ['name' => $name]), $notification, [], true));
+        return $res;
+    }
 
-            if ($request->get('laravel', true)) {
-                $envPath = $www . '/.env';
-                $env = Dotenv::parse(file_get_contents($envPath));
-                `rm -rf $www;composer create-project laravel/laravel $www`;
-                $composerFile = $www . '/composer.json';
-                $composer = json_decode(file_get_contents($composerFile));
-                $composer->name = str_replace('-', '/', $name);
-                $composer->license = 'Proprietary';
-                $composer->keywords = [$name];
-                $composer->description = $name . ' project';
-                $composer->require->{"cubist/cms-back"} = 'dev-backpack5';
-                $composer->repositories = [
-                    ['type' => 'composer', 'url' => "https://composer.cubedesigners.com/"],
-                    ['type' => 'composer', 'url' => "https://repo.backpackforlaravel.com/"]
-                ];
-                $composer->{"minimum-stability"} = 'dev';
-                file_put_contents($composerFile, json_encode($composer));
-                copy(base_path() . '/auth.json', $www . '/auth.json');
-                `rm -rf $www/vendor`;
-                $laravelEnv = Dotenv::parse(file_get_contents($envPath));
-                $laravelEnv = array_merge($laravelEnv, $env, $additionalEnv);
-                $output = new BufferedOutput();
-                Artisan::call('key:generate --show', [], $output);
-                $laravelEnv['APP_KEY'] = trim($output->fetch());
-                Env::arrayToEnvFile($envPath . '.' . $env, $laravelEnv);
-                unlink($envPath);
-                unlink($envPath . '.example');
-            }
+    protected function _createEnv($env, $name, $dockerSuffix, &$notification)
+    {
 
-            $variables['$fixrights'] = implode("\n", $fixRights);
+        $request = request();
 
-            $compose[] = 'network';
-            $composeFileContent = '';
-            foreach ($compose as $item) {
-                $composeFileContent .= file_get_contents(resource_path('tools/dockerwebcontainer/' . $item));
-            }
-            file_put_contents($dir . '/docker-compose.yml', $composeFileContent);
-
-            $infos = ['URL' => 'https://' . $variables['$domain'] . '/'];
-
-            if ($request->get('mysql', true)) {
-                $infos = array_merge($infos,
-                    [
-                        __('Hôte de base de données') => $variables['$name'] . '-mariadb',
-                        __('Nom de base de données') => $variables['$name'],
-                        __('Utilisateur de la base de données') => 'root',
-                        __('Mot de passe de la base de données') => $variables['$dbpassword'],
-                        'Adminer' => 'https://adminer.' . $variables['$domain'] . '/',
-                        __('Serveur SSH/SFTP') => $variables['$domain'],
-                        __('Port') => $variables['$sshport'],
-                        __('Utilisateur') => $variables['$name'],
-                        __('Mot de passe') => $variables['$sshpassword'],
-                    ]);
-            }
-            foreach ($infos as $k => $v) {
-                $notification .= '* ' . $k . ' : ' . $v . "\n";
+        $tmp = Files::tmpdir();
+
+        $envs = $request->get('env', ['production']);
+
+        $domain = $request->get('domain', '');
+
+        $notification .= '---- Environnement : ' . $env . " ----\n\n";
+        $subDomain = $env === 'production' ? (substr_count($domain, '.') >= 2 ? '' : 'www.') : $env . '.';
+
+        if (count($envs) === 1) {
+            $subDomain = '';
+        }
+
+        $laravel = $request->get('laravel', true);
+
+        $variables = [
+            '$user' => $name,
+            '$name' => $name . $dockerSuffix,
+            '$matomodbpassword' => Str::random(16),
+            '$sshport' => rand(10000, 60000),
+            '$domain' => $domain,
+            '$dbpassword' => Str::random(16),
+            '$phpfpmimage' => 'php-fpm',
+            '$locale' => 'fr_FR',
+            '$localeshort' => 'fr',
+            '$sshpassword' => Str::random(16),
+            '$public' => ($laravel || $request->get('public')) ? '/public' : '/',
+            '$environment' => $env,
+        ];
+
+        if (!$variables['$domain']) {
+            $variables['$domain'] = $name . '.dev.cubedesigners.com';
+        }
+        $fixRights = [];
+        $variables['$domain'] = $subDomain . $variables['$domain'];
+
+        $dir = Files::mkdir($tmp . '/' . $name . $dockerSuffix);
+        $www = $dir . 'www';
+        $source = resource_path('tools/dockerwebcontainer/template');
+        `cp -r $source/* $dir/`;
+
+        $additionalEnv = [];
+
+        $compose = ['base'];
+        $variables['$phpversion'] = $request->get('phpversion', '8.3');
+        if ($variables['$phpversion'] !== 'none') {
+            $compose[] = 'php';
+            if (version_compare($variables['$phpversion'], '5.6', '<=')) {
+                $variables['$phpfpmimage'] = 'php-' . $variables['$phpversion'] . '-fpm';
             }
-            $notification .= "\n";
+            $fixRights[] = 'chown 0:0 ./config/cron/crontab';
+        }
+        if ($laravel || $request->get('mysql', true)) {
+            $compose[] = 'mysql';
+            $fixRights[] = 'chown -R 999:999 ./database/data';
+
+            $additionalEnv['DB_CONNECTION'] = 'mysql';
+            $additionalEnv['DB_HOST'] = '$name-mariadb';
+            $additionalEnv['DB_PORT'] = '3306';
+            $additionalEnv['DB_DATABASE'] = '$name';
+            $additionalEnv['DB_USERNAME'] = 'root';
+            $additionalEnv['DB_PASSWORD'] = '$dbpassword';
+        }
+        if ($laravel || $request->get('redis', true)) {
+            $compose[] = 'redis';
+            $fixRights[] = 'chown -R 999:999 ./redis';
+            $additionalEnv['CACHE_DRIVER'] = 'redis';
+            $additionalEnv['SESSION_DRIVER'] = 'redis';
+            $additionalEnv['REDIS_HOST'] = '$name-redis';
+        }
+        if ($request->get('matomo', true)) {
+            $compose[] = 'matomo';
+        }
+        if ($request->get('elasticsearch', false)) {
+            $compose[] = 'elasticsearch';
+            $fixRights[] = 'chmod -R 777 ./esdata';
+        }
+
+        if ($request->get('laravel', true)) {
+            $envPath = $www . '/.env';
+            $projectEnv = Dotenv::parse(file_get_contents($envPath));
+            `rm -rf $www;composer create-project laravel/laravel $www`;
+            $composerFile = $www . '/composer.json';
+            $composer = json_decode(file_get_contents($composerFile));
+            $composer->name = str_replace('-', '/', $name);
+            $composer->license = 'Proprietary';
+            $composer->keywords = [$name];
+            $composer->description = $name . ' project';
+            $composer->require->{"cubist/cms-back"} = 'dev-backpack5';
+            $composer->repositories = [
+                ['type' => 'composer', 'url' => "https://composer.cubedesigners.com/"],
+                ['type' => 'composer', 'url' => "https://repo.backpackforlaravel.com/"]
+            ];
+            $composer->{"minimum-stability"} = 'dev';
+            file_put_contents($composerFile, json_encode($composer));
+            copy(base_path() . '/auth.json', $www . '/auth.json');
+            `rm -rf $www/vendor`;
+            $laravelEnv = Dotenv::parse(file_get_contents($envPath));
+            $laravelEnv = array_merge($laravelEnv, $projectEnv, $additionalEnv);
+            $output = new BufferedOutput();
+            Artisan::call('key:generate --show', [], $output);
+            $laravelEnv['APP_KEY'] = trim($output->fetch());
+            Env::arrayToEnvFile($envPath . '.' . $env, $laravelEnv);
+            unlink($envPath);
+            unlink($envPath . '.example');
+        }
 
-            $docker = $www . '/.docker';
+        $variables['$fixrights'] = implode("\n", $fixRights);
 
-            `mkdir -p $docker;mv $dir/images $docker;mv $dir/config $docker;mv $dir/update $docker;mv $dir/docker-compose.yml $docker`;
-            file_put_contents($dir . 'update', '#!/bin/sh' . "\n" . "cd /docker/$name\nrm ./update;ln -sf ./www/.docker/$env/docker-compose.yml docker-compose.yml\nln -sf ./www/.docker/$env/update update\nchmod 755 ./www/.docker/update\n./www/.docker/update");
-            chmod($dir . 'update', 0755);
-            Files::recursiveReplaceStringInDir($dir, $variables);
+        $compose[] = 'network';
+        $composeFileContent = '';
+        foreach ($compose as $item) {
+            $composeFileContent .= file_get_contents(resource_path('tools/dockerwebcontainer/' . $item));
         }
+        file_put_contents($dir . '/docker-compose.yml', $composeFileContent);
+
+        $infos = ['URL' => 'https://' . $variables['$domain'] . '/'];
+
+        if ($request->get('mysql', true)) {
+            $infos = array_merge($infos,
+                [
+                    __('Hôte de base de données') => $variables['$name'] . '-mariadb',
+                    __('Nom de base de données') => $variables['$name'],
+                    __('Utilisateur de la base de données') => 'root',
+                    __('Mot de passe de la base de données') => $variables['$dbpassword'],
+                    'Adminer' => 'https://adminer.' . $variables['$domain'] . '/',
+                    __('Serveur SSH/SFTP') => $variables['$domain'],
+                    __('Port') => $variables['$sshport'],
+                    __('Utilisateur') => $variables['$name'],
+                    __('Mot de passe') => $variables['$sshpassword'],
+                ]);
+        }
+        foreach ($infos as $k => $v) {
+            $notification .= '* ' . $k . ' : ' . $v . "\n";
+        }
+        $notification .= "\n";
 
-        $tmpfile = Files::tempnam() . '.zip';
-        Zip::archive($tmp, $tmpfile);
-        Files::rmdir($tmp);
+        $docker = $www . '/.docker';
 
-        $res = response()->download($tmpfile, $name . '.zip')->deleteFileAfterSend(true);
-        backpack_user()->notify(new ToolboxNotification(__('Container :name web prêt', ['name' => $name]), $notification, [], true));
-        return $res;
+        `mkdir -p $docker/$env;mv $dir/images $docker;mv $dir/config $docker;mv $dir/update $docker/$env;mv $dir/docker-compose.yml $docker/$env`;
+        file_put_contents($dir . 'update', '#!/bin/sh' . "\n" . "cd /docker/$name$dockerSuffix\nrm ./update\nln -sf ./www/.docker/$env/docker-compose.yml docker-compose.yml\nln -sf ./www/.docker/$env/update update\nchmod 755 ./www/.docker/update\n./www/.docker/update");
+        chmod($dir . 'update', 0755);
+        Files::recursiveReplaceStringInDir($dir, $variables);
+
+        return $dir;
     }
 }
index cd1af0ca729fb875fecfa98ee062b8e63e55d591..14d0fd4d9f3db739f0a799fd5ed1015563adcd58 100644 (file)
             "source": {
                 "type": "git",
                 "url": "git://git.cubedesigners.com/cubist_cms-back.git",
-                "reference": "56509efd3b620e928ed14f3d722802c1027e4b09"
+                "reference": "48039b3810803a836b7b4ab19b09a80be3b74689"
             },
             "dist": {
                 "type": "tar",
-                "url": "https://composer.cubedesigners.com/dist/cubist/cms-back/cubist-cms-back-dev-backpack5-4fcd03.tar",
-                "reference": "56509efd3b620e928ed14f3d722802c1027e4b09",
-                "shasum": "80c966f4ce25af613b9b89bc5926e9f1689420fe"
+                "url": "https://composer.cubedesigners.com/dist/cubist/cms-back/cubist-cms-back-dev-backpack5-b9c537.tar",
+                "reference": "48039b3810803a836b7b4ab19b09a80be3b74689",
+                "shasum": "338dc444826c83941232e1c2555464f22fc11e3e"
             },
             "require": {
                 "backpack/backupmanager": "^v3.0.9",
                 }
             ],
             "description": "Cubist Backpack extension",
-            "time": "2024-01-15T18:38:35+00:00"
+            "time": "2024-01-24T11:17:46+00:00"
         },
         {
             "name": "cubist/cms-front",
             "source": {
                 "type": "git",
                 "url": "git://git.cubedesigners.com/cubist_net.git",
-                "reference": "52f7f103f94793d3d6318cb65e00dbe0c8f4226f"
+                "reference": "9d3823f1b3fce0ec412d6018029fdd03a807af0a"
             },
             "dist": {
                 "type": "tar",
-                "url": "https://composer.cubedesigners.com/dist/cubist/net/cubist-net-dev-master-91f83d.tar",
-                "reference": "52f7f103f94793d3d6318cb65e00dbe0c8f4226f",
-                "shasum": "5395e472bf4a7c1c7a33a3c7c2d40ec587de8f59"
+                "url": "https://composer.cubedesigners.com/dist/cubist/net/cubist-net-dev-master-88722a.tar",
+                "reference": "9d3823f1b3fce0ec412d6018029fdd03a807af0a",
+                "shasum": "fdd28b01b4b9ac324b7f40b0e92ddd75271ca0ad"
             },
             "require": {
                 "cubist/util": "dev-master",
                 }
             ],
             "description": "net cubist composer package",
-            "time": "2023-11-30T16:25:50+00:00"
+            "time": "2024-01-24T08:02:45+00:00"
         },
         {
             "name": "cubist/pdf",
             "source": {
                 "type": "git",
                 "url": "git://git.cubedesigners.com/cubist_pdf.git",
-                "reference": "f4fde37c6a0f30a62d0c702b05a4454122a63874"
+                "reference": "0ed905cbc9025bfa2118c48073ad40721219353b"
             },
             "dist": {
                 "type": "tar",
-                "url": "https://composer.cubedesigners.com/dist/cubist/pdf/cubist-pdf-dev-master-fdd331.tar",
-                "reference": "f4fde37c6a0f30a62d0c702b05a4454122a63874",
-                "shasum": "a5961c463a5f4239afca2a112f28b76ab3a4e2af"
+                "url": "https://composer.cubedesigners.com/dist/cubist/pdf/cubist-pdf-dev-master-126d9e.tar",
+                "reference": "0ed905cbc9025bfa2118c48073ad40721219353b",
+                "shasum": "12dd4fa201a4d84306a9436db54ad6784af4ef10"
             },
             "require": {
                 "cubist/util": "dev-master",
                 "cubist",
                 "pdf"
             ],
-            "time": "2023-12-20T16:22:40+00:00"
+            "time": "2024-01-19T09:44:53+00:00"
         },
         {
             "name": "cubist/scorm",
             "source": {
                 "type": "git",
                 "url": "git://git.cubedesigners.com/cubist_util.git",
-                "reference": "f15e99193c36a9b70d5a0cf523d8ff42680e9abb"
+                "reference": "601e15bd4f99a05a2c4be400a475d1473bb30e84"
             },
             "dist": {
                 "type": "tar",
-                "url": "https://composer.cubedesigners.com/dist/cubist/util/cubist-util-dev-master-cbad04.tar",
-                "reference": "f15e99193c36a9b70d5a0cf523d8ff42680e9abb",
-                "shasum": "cdabb1faca8a0d49608d95c70a7a5210dfaac2f7"
+                "url": "https://composer.cubedesigners.com/dist/cubist/util/cubist-util-dev-master-29c66e.tar",
+                "reference": "601e15bd4f99a05a2c4be400a475d1473bb30e84",
+                "shasum": "7dd3298f216b05b671939ac90a5f6fd3d8375a46"
             },
             "require": {
                 "cubist/net": "dev-master",
                 }
             ],
             "description": "Utilities class",
-            "time": "2024-01-15T16:33:50+00:00"
+            "time": "2024-01-30T07:38:57+00:00"
         },
         {
             "name": "cviebrock/eloquent-sluggable",
         },
         {
             "name": "doctrine/dbal",
-            "version": "3.7.2",
+            "version": "3.8.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/dbal.git",
-                "reference": "0ac3c270590e54910715e9a1a044cc368df282b2"
+                "reference": "d244f2e6e6bf32bff5174e6729b57214923ecec9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/dbal/zipball/0ac3c270590e54910715e9a1a044cc368df282b2",
-                "reference": "0ac3c270590e54910715e9a1a044cc368df282b2",
+                "url": "https://api.github.com/repos/doctrine/dbal/zipball/d244f2e6e6bf32bff5174e6729b57214923ecec9",
+                "reference": "d244f2e6e6bf32bff5174e6729b57214923ecec9",
                 "shasum": ""
             },
             "require": {
                 "doctrine/coding-standard": "12.0.0",
                 "fig/log-test": "^1",
                 "jetbrains/phpstorm-stubs": "2023.1",
-                "phpstan/phpstan": "1.10.42",
+                "phpstan/phpstan": "1.10.56",
                 "phpstan/phpstan-strict-rules": "^1.5",
-                "phpunit/phpunit": "9.6.13",
+                "phpunit/phpunit": "9.6.15",
                 "psalm/plugin-phpunit": "0.18.4",
                 "slevomat/coding-standard": "8.13.1",
-                "squizlabs/php_codesniffer": "3.7.2",
-                "symfony/cache": "^5.4|^6.0",
-                "symfony/console": "^4.4|^5.4|^6.0",
+                "squizlabs/php_codesniffer": "3.8.1",
+                "symfony/cache": "^5.4|^6.0|^7.0",
+                "symfony/console": "^4.4|^5.4|^6.0|^7.0",
                 "vimeo/psalm": "4.30.0"
             },
             "suggest": {
             ],
             "support": {
                 "issues": "https://github.com/doctrine/dbal/issues",
-                "source": "https://github.com/doctrine/dbal/tree/3.7.2"
+                "source": "https://github.com/doctrine/dbal/tree/3.8.0"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2023-11-19T08:06:58+00:00"
+            "time": "2024-01-25T21:44:02+00:00"
         },
         {
             "name": "doctrine/deprecations",
             "source": {
                 "type": "git",
                 "url": "git://git.cubedesigners.com/fluidbook_tools.git",
-                "reference": "57526de1fdc708b39ff9a161fe4859025bb69f38"
+                "reference": "0a4a4c6605137583f8db296fb1e400bd4a26c0d4"
             },
             "dist": {
                 "type": "tar",
-                "url": "https://composer.cubedesigners.com/dist/fluidbook/tools/fluidbook-tools-dev-master-6fe20d.tar",
-                "reference": "57526de1fdc708b39ff9a161fe4859025bb69f38",
-                "shasum": "3511f038673257bf8cab7967a389d2b82238a353"
+                "url": "https://composer.cubedesigners.com/dist/fluidbook/tools/fluidbook-tools-dev-master-2c2082.tar",
+                "reference": "0a4a4c6605137583f8db296fb1e400bd4a26c0d4",
+                "shasum": "016a8b47bf5d23809af3d3f144d971c756ad1954"
             },
             "require": {
                 "barryvdh/laravel-debugbar": "*",
                 }
             ],
             "description": "Fluidbook Tools",
-            "time": "2024-01-08T15:06:53+00:00"
+            "time": "2024-01-18T15:48:35+00:00"
         },
         {
             "name": "fruitcake/php-cors",
         },
         {
             "name": "laravel/framework",
-            "version": "v10.40.0",
+            "version": "v10.42.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/laravel/framework.git",
-                "reference": "7a9470071dac9579ebf29ad1b9d73e4b8eb586fc"
+                "reference": "fef1aff874a6749c44f8e142e5764eab8cb96890"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/laravel/framework/zipball/7a9470071dac9579ebf29ad1b9d73e4b8eb586fc",
-                "reference": "7a9470071dac9579ebf29ad1b9d73e4b8eb586fc",
+                "url": "https://api.github.com/repos/laravel/framework/zipball/fef1aff874a6749c44f8e142e5764eab8cb96890",
+                "reference": "fef1aff874a6749c44f8e142e5764eab8cb96890",
                 "shasum": ""
             },
             "require": {
                 "issues": "https://github.com/laravel/framework/issues",
                 "source": "https://github.com/laravel/framework"
             },
-            "time": "2024-01-09T11:46:47+00:00"
+            "time": "2024-01-23T15:07:56+00:00"
         },
         {
             "name": "laravel/prompts",
         },
         {
             "name": "league/flysystem",
-            "version": "3.23.0",
+            "version": "3.23.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/thephpleague/flysystem.git",
-                "reference": "d4ad81e2b67396e33dc9d7e54ec74ccf73151dcc"
+                "reference": "199e1aebbe3e62bd39f4d4fc8c61ce0b3786197e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/d4ad81e2b67396e33dc9d7e54ec74ccf73151dcc",
-                "reference": "d4ad81e2b67396e33dc9d7e54ec74ccf73151dcc",
+                "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/199e1aebbe3e62bd39f4d4fc8c61ce0b3786197e",
+                "reference": "199e1aebbe3e62bd39f4d4fc8c61ce0b3786197e",
                 "shasum": ""
             },
             "require": {
             ],
             "support": {
                 "issues": "https://github.com/thephpleague/flysystem/issues",
-                "source": "https://github.com/thephpleague/flysystem/tree/3.23.0"
+                "source": "https://github.com/thephpleague/flysystem/tree/3.23.1"
             },
             "funding": [
                 {
                     "type": "github"
                 }
             ],
-            "time": "2023-12-04T10:16:17+00:00"
+            "time": "2024-01-26T18:42:03+00:00"
         },
         {
             "name": "league/flysystem-local",
-            "version": "3.23.0",
+            "version": "3.23.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/thephpleague/flysystem-local.git",
-                "reference": "5cf046ba5f059460e86a997c504dd781a39a109b"
+                "reference": "b884d2bf9b53bb4804a56d2df4902bb51e253f00"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/5cf046ba5f059460e86a997c504dd781a39a109b",
-                "reference": "5cf046ba5f059460e86a997c504dd781a39a109b",
+                "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/b884d2bf9b53bb4804a56d2df4902bb51e253f00",
+                "reference": "b884d2bf9b53bb4804a56d2df4902bb51e253f00",
                 "shasum": ""
             },
             "require": {
             ],
             "support": {
                 "issues": "https://github.com/thephpleague/flysystem-local/issues",
-                "source": "https://github.com/thephpleague/flysystem-local/tree/3.23.0"
+                "source": "https://github.com/thephpleague/flysystem-local/tree/3.23.1"
             },
             "funding": [
                 {
                     "type": "github"
                 }
             ],
-            "time": "2023-12-04T10:14:46+00:00"
+            "time": "2024-01-26T18:25:23+00:00"
         },
         {
             "name": "league/glide",
         },
         {
             "name": "league/mime-type-detection",
-            "version": "1.14.0",
+            "version": "1.15.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/thephpleague/mime-type-detection.git",
-                "reference": "b6a5854368533df0295c5761a0253656a2e52d9e"
+                "reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/b6a5854368533df0295c5761a0253656a2e52d9e",
-                "reference": "b6a5854368533df0295c5761a0253656a2e52d9e",
+                "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301",
+                "reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301",
                 "shasum": ""
             },
             "require": {
             "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.14.0"
+                "source": "https://github.com/thephpleague/mime-type-detection/tree/1.15.0"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2023-10-17T14:13:20+00:00"
+            "time": "2024-01-28T23:22:08+00:00"
         },
         {
             "name": "league/uri",
         },
         {
             "name": "nesbot/carbon",
-            "version": "2.72.1",
+            "version": "2.72.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/briannesbitt/Carbon.git",
-                "reference": "2b3b3db0a2d0556a177392ff1a3bf5608fa09f78"
+                "reference": "3e7edc41b58d65509baeb0d4a14c8fa41d627130"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/2b3b3db0a2d0556a177392ff1a3bf5608fa09f78",
-                "reference": "2b3b3db0a2d0556a177392ff1a3bf5608fa09f78",
+                "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/3e7edc41b58d65509baeb0d4a14c8fa41d627130",
+                "reference": "3e7edc41b58d65509baeb0d4a14c8fa41d627130",
                 "shasum": ""
             },
             "require": {
                     "type": "tidelift"
                 }
             ],
-            "time": "2023-12-08T23:47:49+00:00"
+            "time": "2024-01-19T00:21:53+00:00"
         },
         {
             "name": "nette/schema",
-            "version": "v1.2.5",
+            "version": "v1.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/nette/schema.git",
-                "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a"
+                "reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/nette/schema/zipball/0462f0166e823aad657c9224d0f849ecac1ba10a",
-                "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a",
+                "url": "https://api.github.com/repos/nette/schema/zipball/a6d3a6d1f545f01ef38e60f375d1cf1f4de98188",
+                "reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188",
                 "shasum": ""
             },
             "require": {
-                "nette/utils": "^2.5.7 || ^3.1.5 ||  ^4.0",
-                "php": "7.1 - 8.3"
+                "nette/utils": "^4.0",
+                "php": "8.1 - 8.3"
             },
             "require-dev": {
-                "nette/tester": "^2.3 || ^2.4",
+                "nette/tester": "^2.4",
                 "phpstan/phpstan-nette": "^1.0",
-                "tracy/tracy": "^2.7"
+                "tracy/tracy": "^2.8"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.2-dev"
+                    "dev-master": "1.3-dev"
                 }
             },
             "autoload": {
             ],
             "support": {
                 "issues": "https://github.com/nette/schema/issues",
-                "source": "https://github.com/nette/schema/tree/v1.2.5"
+                "source": "https://github.com/nette/schema/tree/v1.3.0"
             },
-            "time": "2023-10-05T20:37:59+00:00"
+            "time": "2023-12-11T11:54:22+00:00"
         },
         {
             "name": "nette/utils",
-            "version": "v4.0.3",
+            "version": "v4.0.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/nette/utils.git",
-                "reference": "a9d127dd6a203ce6d255b2e2db49759f7506e015"
+                "reference": "d3ad0aa3b9f934602cb3e3902ebccf10be34d218"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/nette/utils/zipball/a9d127dd6a203ce6d255b2e2db49759f7506e015",
-                "reference": "a9d127dd6a203ce6d255b2e2db49759f7506e015",
+                "url": "https://api.github.com/repos/nette/utils/zipball/d3ad0aa3b9f934602cb3e3902ebccf10be34d218",
+                "reference": "d3ad0aa3b9f934602cb3e3902ebccf10be34d218",
                 "shasum": ""
             },
             "require": {
             ],
             "support": {
                 "issues": "https://github.com/nette/utils/issues",
-                "source": "https://github.com/nette/utils/tree/v4.0.3"
+                "source": "https://github.com/nette/utils/tree/v4.0.4"
             },
-            "time": "2023-10-29T21:02:13+00:00"
+            "time": "2024-01-17T16:50:36+00:00"
         },
         {
             "name": "norkunas/youtube-dl-php",
         },
         {
             "name": "spatie/laravel-backup",
-            "version": "8.5.0",
+            "version": "8.5.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/spatie/laravel-backup.git",
-                "reference": "6d7740f2e4b353ab1e3c514c18ecbb53c71ec66c"
+                "reference": "4e97ff2c8b65835037e746755941bf05430e191d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/spatie/laravel-backup/zipball/6d7740f2e4b353ab1e3c514c18ecbb53c71ec66c",
-                "reference": "6d7740f2e4b353ab1e3c514c18ecbb53c71ec66c",
+                "url": "https://api.github.com/repos/spatie/laravel-backup/zipball/4e97ff2c8b65835037e746755941bf05430e191d",
+                "reference": "4e97ff2c8b65835037e746755941bf05430e191d",
                 "shasum": ""
             },
             "require": {
             ],
             "support": {
                 "issues": "https://github.com/spatie/laravel-backup/issues",
-                "source": "https://github.com/spatie/laravel-backup/tree/8.5.0"
+                "source": "https://github.com/spatie/laravel-backup/tree/8.5.1"
             },
             "funding": [
                 {
                     "type": "other"
                 }
             ],
-            "time": "2024-01-11T08:55:19+00:00"
+            "time": "2024-01-23T08:57:08+00:00"
         },
         {
             "name": "spatie/laravel-googletagmanager",
         },
         {
             "name": "phpunit/phpunit",
-            "version": "9.6.15",
+            "version": "9.6.16",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "05017b80304e0eb3f31d90194a563fd53a6021f1"
+                "reference": "3767b2c56ce02d01e3491046f33466a1ae60a37f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/05017b80304e0eb3f31d90194a563fd53a6021f1",
-                "reference": "05017b80304e0eb3f31d90194a563fd53a6021f1",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3767b2c56ce02d01e3491046f33466a1ae60a37f",
+                "reference": "3767b2c56ce02d01e3491046f33466a1ae60a37f",
                 "shasum": ""
             },
             "require": {
             "support": {
                 "issues": "https://github.com/sebastianbergmann/phpunit/issues",
                 "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
-                "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.15"
+                "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.16"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2023-12-01T16:55:19+00:00"
+            "time": "2024-01-19T07:03:14+00:00"
         },
         {
             "name": "psy/psysh",
         "ext-zlib": "*"
     },
     "platform-dev": [],
-    "plugin-api-version": "2.1.0"
+    "plugin-api-version": "2.6.0"
 }