RoutePublisher   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 76
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Importance

Changes 0
Metric Value
wmc 10
lcom 1
cbo 1
dl 0
loc 76
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A getStoredProvidedRoutes() 0 7 1
A publishProvidedRoutes() 0 18 4
A cleanupProvidedRoutes() 0 18 4
A syncProvidedRoutes() 0 5 1
1
<?php
2
3
4
namespace ElementsFramework\DynamicRouting\Service\Publishing;
5
6
7
use ElementsFramework\DynamicRouting\Interfaces\RouteProvider;
8
use ElementsFramework\DynamicRouting\Model\DynamicRoute;
9
10
/**
11
 * Handles the adding and removing of routes published by other Elements components.
12
 * Class RoutePublisher
13
 * @package ElementsFramework\DynamicRouting\Service\Publishing
14
 */
15
class RoutePublisher
16
{
17
18
    /**
19
     * Returns an array of DynamicRoutes with keys being their name.
20
     * @return \ElementsFramework\DynamicRouting\Model\DynamicRoute[]
21
     */
22
    protected function getStoredProvidedRoutes()
23
    {
24
        $routes = DynamicRoute::where('userspace', false)->get();
25
        $routes = array_combine($routes->pluck('name')->toArray(), $routes->all());
26
27
        return $routes;
28
    }
29
30
    /**
31
     * Creates all published route that have not been already created and returns them.
32
     * @return \ElementsFramework\DynamicRouting\Model\DynamicRoute[]
33
     * @throws \ElementsFramework\DynamicRouting\Exception\HandlerNotFoundException
34
     * @throws \ElementsFramework\DynamicRouting\Exception\HandlerValidationFailedForRouteException
35
     */
36
    public function publishProvidedRoutes()
37
    {
38
        $existingRoutes = $this->getStoredProvidedRoutes();
39
        $published = [];
40
41
        /** @var RouteProvider $provider */
42
        foreach(config('dynamic-routing.route-providers') as $provider) {
43
            foreach($provider::getDefaultDynamicRoutes() as $providedRoute) {
44
                if(key_exists($providedRoute->name, $existingRoutes) === false) {
45
                    $providedRoute->userspace = 0;
46
                    $providedRoute->save();
47
                    $published[] = $providedRoute;
48
                }
49
            }
50
        }
51
52
        return $published;
53
    }
54
55
    /**
56
     * Deletes all routes that are not published anymore and returns the deleted routes.
57
     * @return \ElementsFramework\DynamicRouting\Model\DynamicRoute[]
58
     * @throws \Exception
59
     */
60
    public function cleanupProvidedRoutes()
61
    {
62
        $existingRoutes = $this->getStoredProvidedRoutes();
63
64
        /** @var RouteProvider $provider */
65
        foreach(config('dynamic-routing.route-providers') as $provider) {
66
            foreach($provider::getDefaultDynamicRoutes() as $providedRoute) {
67
                unset($existingRoutes[$providedRoute->name]);
68
            }
69
        }
70
71
        $deletedRoutes = $existingRoutes;
72
        foreach($existingRoutes as $route) {
73
            $route->delete();
74
        }
75
76
        return $deletedRoutes;
77
    }
78
79
    /**
80
     * Publishes all new, and deletes all removed provided routes.
81
     */
82
    public function syncProvidedRoutes()
83
    {
84
        $this->publishProvidedRoutes();
85
        $this->cleanupProvidedRoutes();
86
    }
87
88
89
90
}