Bristol SU Support Package
CreatesModuleEnvironment.php
Go to the documentation of this file.
1 <?php
2 
4 
14 
19 {
21 
27  private $alias;
28 
34  private $activity;
35 
40  private $moduleInstance;
41 
47  private $activityInstance;
48 
56  private $for;
57 
63  private $controlUser;
64 
70  private $controlGroup;
71 
77  private $controlRole;
78 
84  private $databaseUser;
85 
92  public function createModuleEnvironment(string $alias)
93  {
94  $this->alias = $alias;
95  $this->setUpAuthentication();
96  $this->setUpModule();
97  $this->setUpDatabaseUser();
98  }
99 
105  public function setActivity(Activity $activity)
106  {
107  $this->activity = $activity;
108  }
109 
115  public function setModuleInstance(\BristolSU\Support\ModuleInstance\Contracts\ModuleInstance $moduleInstance)
116  {
117  $this->moduleInstance = $moduleInstance;
118  }
119 
125  public function setModuleIsFor(string $for)
126  {
127  $this->for = $for;
128  }
129 
135  public function setActivityInstance(ActivityInstance $activityInstance)
136  {
137  $this->activityInstance = $activityInstance;
138  }
139 
145  public function setControlUser(\BristolSU\ControlDB\Contracts\Models\User $user)
146  {
147  $this->controlUser = $user;
148  }
149 
155  public function setControlGroup(\BristolSU\ControlDB\Contracts\Models\Group $group)
156  {
157  $this->controlGroup = $group;
158  }
159 
165  public function setControlRole(\BristolSU\ControlDB\Contracts\Models\Role $role)
166  {
167  $this->controlRole = $role;
168  }
169 
175  public function setDatabaseUser(DatabaseUser $databaseUser)
176  {
177  $this->databaseUser = $databaseUser;
178  }
179 
185  public function getActivity(): Activity
186  {
187  return $this->activity;
188  }
189 
195  public function getModuleIsFor(): string
196  {
197  return $this->for;
198  }
199 
205  public function getModuleInstance(): \BristolSU\Support\ModuleInstance\Contracts\ModuleInstance
206  {
207  return $this->moduleInstance;
208  }
209 
215  public function getActivityInstance(): ActivityInstance
216  {
217  return $this->activityInstance;
218  }
219 
225  public function getControlUser(): \BristolSU\ControlDB\Contracts\Models\User
226  {
227  return $this->controlUser;
228  }
229 
235  public function getControlGroup(): \BristolSU\ControlDB\Contracts\Models\Group
236  {
237  return $this->controlGroup;
238  }
239 
245  public function getControlRole(): \BristolSU\ControlDB\Contracts\Models\Role
246  {
247  return $this->controlRole;
248  }
249 
255  public function getDatabaseUser(): DatabaseUser
256  {
257  return $this->databaseUser;
258  }
259 
267  private function setUpModule()
268  {
269  $this->activity = ($this->activity
270  ?? factory(Activity::class)->create([
271  'slug' => Str::random(5),
272  'activity_for' => ($this->for??'user')
273  ]));
274 
275  $this->moduleInstance = ($this->moduleInstance
276  ?? factory(ModuleInstance::class)->create([
277  'slug' => Str::random(5),
278  'activity_id' => $this->activity->id,
279  'alias' => $this->alias
280  ]));
281 
282  $this->activityInstance = ($this->activityInstance
283  ?? factory(ActivityInstance::class)->create([
284  'activity_id' => $this->activity->id,
285  'resource_id' => ($this->for === 'role' ? $this->controlRole->id() : ($this->for === 'group' ? $this->controlGroup->id() : $this->controlUser->id())
286  ),
287  'resource_type' => ($this->for??'user')
288  ]));
289 
290  app()->instance(Activity::class, $this->activity);
291  app()->instance(ModuleInstance::class, $this->moduleInstance);
292  app()->make(ActivityInstanceResolver::class)->setActivityInstance($this->activityInstance);
293  app()->instance(ActivityInstance::class, $this->activityInstance);
294 
295  }
296 
307  private function setUpAuthentication()
308  {
309  if ($this->for === 'group') {
310  $this->controlGroup = ($this->controlGroup ?? $this->newGroup());
311  $this->beGroup($this->controlGroup);
312  }
313  if ($this->for === 'role') {
314  $this->controlRole = ($this->controlRole ?? $this->newRole());
315  $this->controlGroup = $this->controlRole->group();
316  $this->beRole($this->controlRole);
317  $this->beGroup($this->controlGroup);
318 
319  }
320  $this->controlUser = ($this->controlUser ?? $this->newUser());
321  $this->beUser($this->controlUser);
322  }
323 
327  private function setUpDatabaseUser()
328  {
329  $this->databaseUser = ($this->databaseUser ?? factory(DatabaseUser::class)->create([
330  'control_id' => ($this->controlUser ? $this->controlUser->id() : 1)
331  ]));
332  $this->be($this->databaseUser);
333  }
334 
341  public function adminUrl($path = '')
342  {
343  if (!Str::startsWith($path, '/')) {
344  $path = '/'.$path;
345  }
346  return '/a/'.$this->activity->slug.'/'.$this->moduleInstance->slug.'/'.$this->alias.$path;
347  }
348 
355  public function userUrl($path = '')
356  {
357  if (!Str::startsWith($path, '/')) {
358  $path = '/'.$path;
359  }
360  return '/p/'.$this->activity->slug.'/'.$this->moduleInstance->slug.'/'.$this->alias.$path;
361  }
362 
369  public function adminApiUrl($path = '')
370  {
371  if (!Str::startsWith($path, '/')) {
372  $path = '/'.$path;
373  }
374  return '/api/a/'.$this->activity->slug.'/'.$this->moduleInstance->slug.'/'.$this->alias.$path;
375  }
376 
383  public function userApiUrl($path = '')
384  {
385  if (!Str::startsWith($path, '/')) {
386  $path = '/'.$path;
387  }
388  return '/api/p/'.$this->activity->slug.'/'.$this->moduleInstance->slug.'/'.$this->alias.$path;
389  }
390 
391 
392 }