Passed
Push — master ( 0e0aaa...733839 )
by Nicolaas
11:40
created

AddLinkToHasOneField   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 21
Duplicated Lines 0 %

Importance

Changes 7
Bugs 0 Features 0
Metric Value
eloc 16
c 7
b 0
f 0
dl 0
loc 21
rs 10
wmc 6

1 Method

Rating   Name   Duplication   Size   Complexity  
A add_link() 0 19 6
1
<?php
2
3
namespace Sunnysideup\CMSNiceties\Api;
4
5
use SilverStripe\Forms\FormField;
6
use SilverStripe\ORM\DataObject;
7
use SilverStripe\ORM\FieldType\DBHTMLVarchar;
8
9
class AddLinkToHasOneField
10
{
11
    public static function add_link(FormField $field, DataObject $object)
12
    {
13
        $dbFieldNameWithID = $field->getName();
14
        $dbFieldName = substr((string) $dbFieldNameWithID, 0, -2);
15
        $options = $object->config()->get('has_one');
16
        $className = $options[$dbFieldName] ?? '';
17
        if ($className) {
18
            $linkedObject = $object->{$dbFieldName}();
19
            if ($linkedObject->canEdit()) {
20
                $link = '';
21
                $linkAsHtml = '';
22
                if ($linkedObject->exists() && $linkedObject->hasMethod('CMSEditLink')) {
23
                    $link = $linkedObject->CMSEditLink();
24
                    $linkAsHtml = '
25
                        <a href="' . $link . '" style="text-decoration: none!important;">✎ edit ' . $linkedObject->getTitle() . '</a><br />';
26
                }
27
28
                if ($link) {
29
                    $field->setRightTitle(DBHTMLVarchar::create_field(DBHTMLVarchar::class, $linkAsHtml));
30
                }
31
            }
32
        }
33
    }
34
}
35