| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | <?php | 
					
						
							| 
									
										
										
										
											2021-05-22 21:05:28 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | namespace BookStack\Entities\Queries; | 
					
						
							| 
									
										
										
										
											2021-05-22 21:05:28 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-18 00:56:55 +08:00
										 |  |  | use BookStack\Activity\Models\View; | 
					
						
							| 
									
										
										
										
											2024-02-09 00:39:59 +08:00
										 |  |  | use BookStack\Entities\EntityProvider; | 
					
						
							| 
									
										
										
										
											2024-02-28 21:07:34 +08:00
										 |  |  | use BookStack\Entities\Tools\MixedEntityListLoader; | 
					
						
							| 
									
										
										
										
											2024-02-09 00:39:59 +08:00
										 |  |  | use BookStack\Permissions\PermissionApplicator; | 
					
						
							| 
									
										
										
										
											2023-06-10 22:08:07 +08:00
										 |  |  | use Illuminate\Support\Collection; | 
					
						
							| 
									
										
										
										
											2021-05-22 21:05:28 +08:00
										 |  |  | use Illuminate\Support\Facades\DB; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-09 00:39:59 +08:00
										 |  |  | class QueryPopular | 
					
						
							| 
									
										
										
										
											2021-05-22 21:05:28 +08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2024-02-09 00:39:59 +08:00
										 |  |  |     public function __construct( | 
					
						
							|  |  |  |         protected PermissionApplicator $permissions, | 
					
						
							|  |  |  |         protected EntityProvider $entityProvider, | 
					
						
							| 
									
										
										
										
											2024-02-28 21:07:34 +08:00
										 |  |  |         protected MixedEntityListLoader $listLoader, | 
					
						
							| 
									
										
										
										
											2024-02-09 00:39:59 +08:00
										 |  |  |     ) { | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-17 20:45:37 +08:00
										 |  |  |     public function run(int $count, int $page, array $filterModels): Collection | 
					
						
							| 
									
										
										
										
											2021-05-22 21:05:28 +08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2024-02-09 00:39:59 +08:00
										 |  |  |         $query = $this->permissions | 
					
						
							| 
									
										
										
										
											2022-07-17 02:54:25 +08:00
										 |  |  |             ->restrictEntityRelationQuery(View::query(), 'views', 'viewable_id', 'viewable_type') | 
					
						
							| 
									
										
										
										
											2021-05-22 21:05:28 +08:00
										 |  |  |             ->select('*', 'viewable_id', 'viewable_type', DB::raw('SUM(views) as view_count')) | 
					
						
							|  |  |  |             ->groupBy('viewable_id', 'viewable_type') | 
					
						
							|  |  |  |             ->orderBy('view_count', 'desc'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-17 20:45:37 +08:00
										 |  |  |         if (!empty($filterModels)) { | 
					
						
							| 
									
										
										
										
											2024-02-09 00:39:59 +08:00
										 |  |  |             $query->whereIn('viewable_type', $this->entityProvider->getMorphClasses($filterModels)); | 
					
						
							| 
									
										
										
										
											2021-05-22 21:05:28 +08:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-28 21:07:34 +08:00
										 |  |  |         $views = $query | 
					
						
							| 
									
										
										
										
											2021-05-22 21:05:28 +08:00
										 |  |  |             ->skip($count * ($page - 1)) | 
					
						
							|  |  |  |             ->take($count) | 
					
						
							| 
									
										
										
										
											2024-02-28 21:07:34 +08:00
										 |  |  |             ->get(); | 
					
						
							| 
									
										
										
										
											2023-06-10 22:08:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-28 21:20:24 +08:00
										 |  |  |         $this->listLoader->loadIntoRelations($views->all(), 'viewable', true); | 
					
						
							| 
									
										
										
										
											2023-06-10 22:08:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-28 21:07:34 +08:00
										 |  |  |         return $views->pluck('viewable')->filter(); | 
					
						
							| 
									
										
										
										
											2021-05-22 21:05:28 +08:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | } |