diff --git a/.forgejo/workflows/deploy-preprod.yml b/.forgejo/workflows/deploy-preprod.yml index cbe2808..f5519a7 100644 --- a/.forgejo/workflows/deploy-preprod.yml +++ b/.forgejo/workflows/deploy-preprod.yml @@ -62,3 +62,12 @@ jobs: sshpass -p "$PASSWORD" rsync -az --delete -O \ -e 'ssh -p 2244 -o StrictHostKeyChecking=no' \ assets/ $USERNAME@$HOST:$PREPROD_PATH/assets/ + + echo "Deploying .user.ini" + sshpass -p "$PASSWORD" rsync -az -O \ + -e 'ssh -p 2244 -o StrictHostKeyChecking=no' \ + .user.ini $USERNAME@$HOST:$PREPROD_PATH/.user.ini + + echo "Fix ACL mask on writable directories" + sshpass -p "$PASSWORD" ssh -p 2244 -o StrictHostKeyChecking=no $USERNAME@$HOST \ + "setfacl -m mask::rwx $PREPROD_PATH/site/accounts $PREPROD_PATH/site/cache $PREPROD_PATH/site/sessions $PREPROD_PATH/content $PREPROD_PATH/media" diff --git a/.forgejo/workflows/deploy-prod.yml b/.forgejo/workflows/deploy-prod.yml index d407912..a07c0f7 100644 --- a/.forgejo/workflows/deploy-prod.yml +++ b/.forgejo/workflows/deploy-prod.yml @@ -62,3 +62,12 @@ jobs: sshpass -p "$PASSWORD" rsync -az --delete -O \ -e 'ssh -p 2244 -o StrictHostKeyChecking=no' \ assets/ $USERNAME@$HOST:$PROD_PATH/assets/ + + echo "Deploying .user.ini" + sshpass -p "$PASSWORD" rsync -az -O \ + -e 'ssh -p 2244 -o StrictHostKeyChecking=no' \ + .user.ini $USERNAME@$HOST:$PROD_PATH/.user.ini + + echo "Fix ACL mask on writable directories" + sshpass -p "$PASSWORD" ssh -p 2244 -o StrictHostKeyChecking=no $USERNAME@$HOST \ + "setfacl -m mask::rwx $PROD_PATH/site/accounts $PROD_PATH/site/cache $PROD_PATH/site/sessions $PROD_PATH/content $PROD_PATH/media" diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index aa30802..6e95c05 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -56,7 +56,7 @@ deploy_preprod: build_prod: stage: build only: - - prod + - main image: composer:2 script: - apk add --no-cache nodejs npm diff --git a/public/site/blueprints/users/client.yml b/public/site/blueprints/users/client.yml index f321069..d202de8 100644 --- a/public/site/blueprints/users/client.yml +++ b/public/site/blueprints/users/client.yml @@ -30,12 +30,12 @@ sections: fr: Ouvrir la plateforme en: Open platform value: Design to Pack - link: https://designtopack.morphozbygroupepochet.com/ + link: https://designtopack.groupe-pochet.fr/ icon: open - label: fr: Projet(s) en cours en: Current project(s) - link: https://designtopack.morphozbygroupepochet.com/ + link: https://designtopack.groupe-pochet.fr/ value: "{{ user.currentProjects.count }}" icon: folder content: diff --git a/public/site/config/routes/migrate-user-projects.php b/public/site/config/routes/migrate-user-projects.php index abe71bf..e231b34 100644 --- a/public/site/config/routes/migrate-user-projects.php +++ b/public/site/config/routes/migrate-user-projects.php @@ -16,6 +16,7 @@ return [ 'pattern' => 'migrate-user-projects.json', 'method' => 'POST', 'action' => function () { + ini_set('memory_limit', '512M'); $user = kirby()->user(); if (!$user || $user->role()->id() !== 'admin') { diff --git a/public/site/snippets/header.php b/public/site/snippets/header.php index a35fc34..5c7a997 100644 --- a/public/site/snippets/header.php +++ b/public/site/snippets/header.php @@ -34,7 +34,7 @@ diff --git a/public/site/templates/projects.json.php b/public/site/templates/projects.json.php index 6f589eb..4dd737e 100644 --- a/public/site/templates/projects.json.php +++ b/public/site/templates/projects.json.php @@ -11,11 +11,12 @@ function getProjectData($project, $user) { // Utiliser getNotificationsLight() avec cache pour optimiser les performances $notifications = []; - try { - $notifications = $project->getNotificationsLight($user); - } catch (\Throwable $e) { - error_log("Error getting notifications for project {$project->uri()}: " . $e->getMessage()); - $notifications = []; + if ($project instanceof ProjectPage) { + try { + $notifications = $project->getNotificationsLight($user); + } catch (\Throwable $e) { + error_log("Error getting notifications for project {$project->uri()}: " . $e->getMessage()); + } } $data = [ diff --git a/src/components/project/cards/VirtualSample.vue b/src/components/project/cards/VirtualSample.vue index 3b7123f..56d6d34 100644 --- a/src/components/project/cards/VirtualSample.vue +++ b/src/components/project/cards/VirtualSample.vue @@ -25,7 +25,7 @@ const images = computed(() => { }, ]; } - return allVariations.value.map((variation) => getFrontView(variation)) ?? []; + return allVariations.value.map((variation) => getFrontView(variation)).filter(Boolean) ?? []; }); const uri = addLocalePrefix(step.uri); @@ -35,10 +35,13 @@ function getFrontView(variation) { const xMax = parseInt( variation.files[variation.files.length - 1].name.split('_')[1].split('.')[0] ); - const xFrontView = (xMax + 1) / 2; + const xFrontView = Math.round((xMax + 1) / 2); const extension = variation.files[0].name.split('.')[1]; const frontViewName = '0_' + xFrontView + '.' + extension; const frontView = variation.files.find((file) => file.name === frontViewName); - return frontView; + if (!frontView) { + console.warn(`[VirtualSample] Front view "${frontViewName}" not found in variation "${variation.title}", falling back to first file.`); + } + return frontView ?? variation.files[0]; } diff --git a/vite.config.js b/vite.config.js index da73536..7de582b 100644 --- a/vite.config.js +++ b/vite.config.js @@ -14,7 +14,7 @@ export default defineConfig(({ mode }) => { }, }, sourcemap: mode === 'staging', - minify: mode === 'production' ? 'esbuild' : false, + minify: mode === 'production', }, server: { cors: true,