ExternalURLFinder   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 31
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 20
c 2
b 0
f 0
dl 0
loc 31
rs 10
wmc 3

1 Method

Rating   Name   Duplication   Size   Complexity  
A find() 0 24 3
1
<?php
2
3
namespace Sunnysideup\ExternalURLField;
4
5
use SilverStripe\ORM\DataList;
6
use SilverStripe\ORM\FieldType\DBField;
7
8
class ExternalURLFinder
9
{
10
    /**
11
     * finds an object with a matching URL.
12
     * it assumes that links are stored as lower case URLs.
13
     * without the final slash!
14
     */
15
    public static function find(string $link, string $className, string $field, ?bool $removeFinalSlash = true): DataList
16
    {
17
        $link = strtolower($link);
18
        if ($removeFinalSlash) {
19
            $link = rtrim($link, '/');
20
        }
21
        $linkObject = DBField::create_field('ExternalURL', $link);
22
        $domain = $linkObject->Domain();
23
        if (strpos($domain, 'www.') === 0) {
24
            $domainWWW = $domain;
25
            $domainNoWWW = substr($domain, 4);
26
        } else {
27
            $domainWWW = 'www' . $domain;
28
            $domainNoWWW = $domain;
29
        }
30
        $items = [
31
            $domainWWW,
32
            $domainNoWWW,
33
            'https://' . $domainWWW,
34
            'https://' . $domainNoWWW,
35
            'http://' . $domainWWW,
36
            'http://' . $domainNoWWW,
37
        ];
38
        return $className::get()->filter([$field => $items]);
39
    }
40
}
41