| 
									
										
										
										
											2023-08-04 19:27:29 +08:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace BookStack\Activity\Notifications\Messages; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use BookStack\Activity\Models\Loggable; | 
					
						
							| 
									
										
										
										
											2023-11-14 18:31:44 +08:00
										 |  |  | use BookStack\Activity\Notifications\MessageParts\EntityPathMessageLine; | 
					
						
							| 
									
										
										
										
											2023-08-15 21:39:39 +08:00
										 |  |  | use BookStack\Activity\Notifications\MessageParts\LinkedMailMessageLine; | 
					
						
							| 
									
										
										
										
											2023-09-12 02:26:28 +08:00
										 |  |  | use BookStack\App\MailNotification; | 
					
						
							| 
									
										
										
										
											2023-11-14 18:31:44 +08:00
										 |  |  | use BookStack\Entities\Models\Entity; | 
					
						
							|  |  |  | use BookStack\Entities\Models\Page; | 
					
						
							|  |  |  | use BookStack\Permissions\PermissionApplicator; | 
					
						
							| 
									
										
										
										
											2023-09-17 23:20:21 +08:00
										 |  |  | use BookStack\Translation\LocaleDefinition; | 
					
						
							| 
									
										
										
										
											2023-08-04 19:27:29 +08:00
										 |  |  | use BookStack\Users\Models\User; | 
					
						
							|  |  |  | use Illuminate\Bus\Queueable; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-02 22:11:42 +08:00
										 |  |  | abstract class BaseActivityNotification extends MailNotification | 
					
						
							| 
									
										
										
										
											2023-08-04 19:27:29 +08:00
										 |  |  | { | 
					
						
							|  |  |  |     use Queueable; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function __construct( | 
					
						
							|  |  |  |         protected Loggable|string $detail, | 
					
						
							|  |  |  |         protected User $user, | 
					
						
							|  |  |  |     ) { | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Get the array representation of the notification. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param  mixed  $notifiable | 
					
						
							|  |  |  |      * @return array | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function toArray($notifiable) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return [ | 
					
						
							|  |  |  |             'activity_detail' => $this->detail, | 
					
						
							|  |  |  |             'activity_creator' => $this->user, | 
					
						
							|  |  |  |         ]; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2023-08-15 21:39:39 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Build the common reason footer line used in mail messages. | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2023-09-17 23:20:21 +08:00
										 |  |  |     protected function buildReasonFooterLine(LocaleDefinition $locale): LinkedMailMessageLine | 
					
						
							| 
									
										
										
										
											2023-08-15 21:39:39 +08:00
										 |  |  |     { | 
					
						
							|  |  |  |         return new LinkedMailMessageLine( | 
					
						
							|  |  |  |             url('/preferences/notifications'), | 
					
						
							| 
									
										
										
										
											2023-09-17 23:20:21 +08:00
										 |  |  |             $locale->trans('notifications.footer_reason'), | 
					
						
							|  |  |  |             $locale->trans('notifications.footer_reason_link'), | 
					
						
							| 
									
										
										
										
											2023-08-15 21:39:39 +08:00
										 |  |  |         ); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2023-11-14 18:31:44 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Build a line which provides the book > chapter path to a page. | 
					
						
							|  |  |  |      * Takes into account visibility of these parent items. | 
					
						
							|  |  |  |      * Returns null if no path items can be used. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     protected function buildPagePathLine(Page $page, User $notifiable): ?EntityPathMessageLine | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $permissions = new PermissionApplicator($notifiable); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $path = array_filter([$page->book, $page->chapter], function (?Entity $entity) use ($permissions) { | 
					
						
							|  |  |  |             return !is_null($entity) && $permissions->checkOwnableUserAccess($entity, 'view'); | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return empty($path) ? null : new EntityPathMessageLine($path); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2023-08-04 19:27:29 +08:00
										 |  |  | } |