Bristol SU Support Package
CacheFilters.php
Go to the documentation of this file.
1 <?php
2 
4 
5 use BristolSU\ControlDB\Contracts\Repositories\Group as GroupRepository;
6 use BristolSU\ControlDB\Contracts\Repositories\Role as RoleRepository;
13 
17 class CacheFilters extends Command
18 {
19 
25  protected $signature = 'filters:cache';
26 
32  protected $description = 'Caches all filter results for increased speed in page load';
33 
44  public function handle(FilterInstanceRepository $filterInstanceRepository,
45  UserRepository $userRepository,
46  GroupRepository $groupRepository,
47  RoleRepository $roleRepository)
48  {
49  $this->info('Caching filters');
50 
51  $users = collect($userRepository->all());
52  $groups = collect($groupRepository->all());
53  $roles = collect($roleRepository->all());
54 
55  $filterInstances = $filterInstanceRepository->all();
56 
57  $filterInstanceProgress = $this->output->createProgressBar(count($filterInstances));
58  $filterInstanceProgress->start();
59  foreach ($filterInstances as $filterInstance) {
60  if ($filterInstance->for() === 'user') {
61  $this->cacheFilter($filterInstance, $users);
62  } elseif ($filterInstance->for() === 'group') {
63  $this->cacheFilter($filterInstance, $groups);
64  } elseif ($filterInstance->for() === 'role') {
65  $this->cacheFilter($filterInstance, $roles);
66  }
67  $filterInstanceProgress->advance();
68  }
69 
70  }
71 
78  private function cacheFilter(FilterInstance $filterInstance, Collection $models)
79  {
80  foreach ($models as $model) {
81  dispatch(new CacheFilter($filterInstance, $model));
82  }
83  }
84 
85 }
handle(FilterInstanceRepository $filterInstanceRepository, UserRepository $userRepository, GroupRepository $groupRepository, RoleRepository $roleRepository)
cacheFilter(FilterInstance $filterInstance, Collection $models)