Passed
Pull Request — master (#18)
by
unknown
03:29
created

HistoryControllerFactory   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 31
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
dl 0
loc 31
rs 10
c 0
b 0
f 0
wmc 6

2 Methods

Rating   Name   Duplication   Size   Complexity  
A isEnabled() 0 4 2
A create() 0 14 4
1
<?php
2
/**
3
 *
4
 */
5
6
namespace SilverStripe\VersionedAdmin\Controllers;
7
8
use SilverStripe\CMS\Controllers\CMSPageHistoryController;
9
use SilverStripe\CMS\Model\SiteTree;
10
use SilverStripe\Control\HTTPRequest;
11
use SilverStripe\Core\Extensible;
12
use SilverStripe\Core\Injector\Factory;
13
use SilverStripe\Core\Injector\Injector;
14
use SilverStripe\ORM\DB;
15
16
class HistoryControllerFactory implements Factory
17
{
18
    use Extensible;
19
20
    public function create($service, array $params = array())
21
    {
22
        $request = Injector::inst()->get(HTTPRequest::class);
23
        $id = $request->param('ID');
24
25
        if ($id) {
26
            $page = SiteTree::get()->byID($id);
27
            if ($page && $this->isEnabled($page)) {
28
                return Injector::inst()->create(CMSPageHistoryViewerController::class);
29
            }
30
        }
31
32
        // Injector is not used to prevent an infinite loop
33
        return new CMSPageHistoryController();
34
    }
35
36
    /**
37
     * Only activate for pages that have a history viewer capability applied. Extensions can provide their
38
     * own two cents about this criteria.
39
     *
40
     * @param SiteTree $record
41
     * @return bool
42
     */
43
    public function isEnabled(SiteTree $record)
44
    {
45
        $enabledResults = array_filter($this->extend('updateIsEnabled', $record));
46
        return (!empty($enabledResults) && max($enabledResults) === true);
47
    }
48
49
}
50