Passed
Pull Request — master (#18)
by
unknown
03:59 queued 01:28
created

HistoryControllerFactory::create()   A

Complexity

Conditions 4
Paths 3

Size

Total Lines 14
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 7
nc 3
nop 2
dl 0
loc 14
rs 9.2
c 0
b 0
f 0
1
<?php
2
/**
3
 *
4
 */
5
6
namespace SilverStripe\VersionedAdmin\Factories;
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\VersionedAdmin\Controllers\CMSPageHistoryViewerController;
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. Modules 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
        $enabledClasses = CMSPageHistoryViewerController::config()->enabled_pagetypes;
46
        foreach ($enabledClasses as $class) {
47
            if ($record instanceof $class) {
48
                return true;
49
            }
50
        }
51
52
        return false;
53
    }
54
55
}
56