diff --git a/public/content/projects/1_miss-dior-blooming-bouquet/1_client-brief/38969543_extrait-de-louis-sullivan-form-follow-function.-de-la-tour-de-bureaux-artistiquement-consideree.pdf.txt b/public/content/projects/1_miss-dior-blooming-bouquet/1_client-brief/38969543_extrait-de-louis-sullivan-form-follow-function.-de-la-tour-de-bureaux-artistiquement-consideree.pdf.txt index ae87aa6..cb27a3c 100644 --- a/public/content/projects/1_miss-dior-blooming-bouquet/1_client-brief/38969543_extrait-de-louis-sullivan-form-follow-function.-de-la-tour-de-bureaux-artistiquement-consideree.pdf.txt +++ b/public/content/projects/1_miss-dior-blooming-bouquet/1_client-brief/38969543_extrait-de-louis-sullivan-form-follow-function.-de-la-tour-de-bureaux-artistiquement-consideree.pdf.txt @@ -6,133 +6,4 @@ Uuid: s0lNtRA0Z7ybTCWG ---- -Template: document - ----- - -Comments: - -- - page: - uri: projects/miss-dior-blooming-bouquet - title: Miss Dior Blooming Bouquet - file: - uuid: file://s0lNtRA0Z7ybTCWG - pageIndex: 1 - replies: [ ] - text: Un certain commentaire - author: - name: Adrien Payet - email: adrien.payet@outlook.com - uuid: user://WWjXgPWk - role: admin - date: 2024-10-30T16:26:22+01:00 - id: m2w14iph - type: comment - isRead: false - position: - x: null - y: null -- - page: - uri: projects/miss-dior-blooming-bouquet - title: Miss Dior Blooming Bouquet - file: - uuid: file://s0lNtRA0Z7ybTCWG - pageIndex: 1 - replies: - - - page: - uri: projects/miss-dior-blooming-bouquet - title: Miss Dior Blooming Bouquet - file: - uuid: file://s0lNtRA0Z7ybTCWG - pageIndex: 1 - replies: [ ] - text: Réponse - author: - name: Adrien Payet - email: adrien.payet@outlook.com - uuid: user://WWjXgPWk - role: admin - date: 2024-10-30T16:52:46+01:00 - id: m2w22gxz - type: comment - isRead: false - parentId: m2w2252a - text: deuxième commentaire - author: - name: Adrien Payet - email: adrien.payet@outlook.com - uuid: user://WWjXgPWk - role: admin - date: 2024-10-30T16:52:31+01:00 - id: m2w2252a - type: comment - isRead: false - position: - x: null - y: null -- - page: - uri: projects/miss-dior-blooming-bouquet - title: Miss Dior Blooming Bouquet - file: - uuid: file://s0lNtRA0Z7ybTCWG - pageIndex: 1 - replies: [ ] - text: test - author: - name: Adrien Payet - email: adrien.payet@outlook.com - uuid: user://WWjXgPWk - role: admin - date: 2024-11-06T16:19:29+01:00 - id: m360ymc1 - type: comment - isRead: false - position: - x: "148.03332519531" - y: 162 -- - page: - uri: projects/miss-dior-blooming-bouquet - title: Miss Dior Blooming Bouquet - file: - uuid: file://s0lNtRA0Z7ybTCWG - pageIndex: 1 - replies: [ ] - text: Nouveau commentaire positionné - author: - name: Adrien Payet - email: adrien.payet@outlook.com - uuid: user://WWjXgPWk - role: admin - date: 2024-11-06T16:33:11+01:00 - id: m361g8sk - type: comment - isRead: false - position: - x: "215.03332519531" - y: 181 -- - page: - uri: projects/miss-dior-blooming-bouquet - title: Miss Dior Blooming Bouquet - file: - uuid: file://s0lNtRA0Z7ybTCWG - pageIndex: 1 - replies: [ ] - text: ouveau commentaire - author: - name: Utilisateur Dior - email: utilisateur@dior.com - uuid: user://HfuumN8s - role: client - date: 2024-11-06T16:57:15+01:00 - id: m362b71x - type: comment - isRead: false - position: - x: '59.033325195312' - y: 59 \ No newline at end of file +Template: document \ No newline at end of file diff --git a/public/content/projects/1_miss-dior-blooming-bouquet/project.txt b/public/content/projects/1_miss-dior-blooming-bouquet/project.txt index 3acd237..ab1abf4 100644 --- a/public/content/projects/1_miss-dior-blooming-bouquet/project.txt +++ b/public/content/projects/1_miss-dior-blooming-bouquet/project.txt @@ -10,7 +10,10 @@ Client: - page://G418qZ4ABsoWFx4i ---- -Managers: - user://WWjXgPWk +Managers: + +- user://WWjXgPWk +- user://HfuumN8s ---- diff --git a/public/site/blueprints/pages/projects.yml b/public/site/blueprints/pages/projects.yml index 637e478..e8fb9ec 100644 --- a/public/site/blueprints/pages/projects.yml +++ b/public/site/blueprints/pages/projects.yml @@ -17,6 +17,7 @@ tabs: type: pages query: user.projects create: false + search: true help: Projets pour lesquels vous êtes nommé chef de projet. image: query: page.client.toPage.logo.toFile diff --git a/public/site/blueprints/site.yml b/public/site/blueprints/site.yml index 9f01f6c..481e425 100644 --- a/public/site/blueprints/site.yml +++ b/public/site/blueprints/site.yml @@ -18,6 +18,14 @@ tabs: projects: width: 1/2 sections: + modifiedProjects: + extends: sections/projects + headline: Projets récement modifiés + parent: site.find("projects") + sortBy: modified desc + layout: list + image: + query: page.client.toPage.logo.toFile settings: label: Paramètres icon: cog diff --git a/public/site/plugins/comments/routes/create.php b/public/site/plugins/comments/routes/create.php index 723173c..708a183 100644 --- a/public/site/plugins/comments/routes/create.php +++ b/public/site/plugins/comments/routes/create.php @@ -40,8 +40,11 @@ return [ 'comments' => $comments ]); - $user->sendNotification($newComment); - + try { + $user->sendNotification($page->parent()->uri(), $newComment->toArray()); + } catch (\Throwable $th) { + throw new Exception($th->getMessage(), 1); + } return getFileData($newFile); } ]; \ No newline at end of file diff --git a/public/site/plugins/comments/routes/reply.php b/public/site/plugins/comments/routes/reply.php index 44424a2..e0a54e8 100644 --- a/public/site/plugins/comments/routes/reply.php +++ b/public/site/plugins/comments/routes/reply.php @@ -40,7 +40,7 @@ return [ 'comments' => $comments ]); - $user->sendNotification($newReply); + $user->sendNotification($page->parent()->uri(), $newReply->toArray()); return getFileData($newFile); } diff --git a/public/site/plugins/notifications/user-methods/send.php b/public/site/plugins/notifications/user-methods/send.php index 63b9ee2..b36bcbf 100644 --- a/public/site/plugins/notifications/user-methods/send.php +++ b/public/site/plugins/notifications/user-methods/send.php @@ -1,13 +1,30 @@ users()->not($this) as $otherUser) { +/** + * Send a notification to all users who manage a specific project, excluding the user sending the notification. + * + * This function retrieves all users managing the project specified by `$projectUri` (excluding the current user) + * and adds a new notification to their `notifications` field, stored as a YAML-encoded array. + * If the `notifications` field is empty, an empty array is initialized before appending the new notification. + * In case of an error during update, an exception is thrown with the error message and line number. + * + * @param array $notificationData An associative array containing the notification data to be added. + * @param string $projectUri The URI of the project associated with this notification. + * @throws Exception If an error occurs while updating a user's notifications. + */ + +return function ($projectUri, $notificationData) { + $recipients = page($projectUri)->managers()->toUsers()->not($this); + + if (!$recipients) return; + + foreach ($recipients as $otherUser) { try { $notifications = $otherUser->notifications()->isNotEmpty() ? Yaml::decode($otherUser->notifications()->value()) : []; - $notifications[] = $item->toArray(); + $notifications[] = $notificationData; $otherUser->update([ 'notifications' => $notifications diff --git a/src/components/comments/Comments.vue b/src/components/comments/Comments.vue index a038023..ea12e38 100644 --- a/src/components/comments/Comments.vue +++ b/src/components/comments/Comments.vue @@ -211,6 +211,7 @@ function toggleCommentPositionMode(enable) { function handleCommentPositionClick(event) { const pageContainer = event.target.closest(".page-inner-container"); + if (!pageContainer) return; const pageLabel = pageContainer .closest(".vpv-page-inner-container")