InternalLinkNode::getLinkTitle()   A
last analyzed

Complexity

Conditions 6
Paths 4

Size

Total Lines 12
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 6
eloc 7
nc 4
nop 3
dl 0
loc 12
rs 9.2222
c 0
b 0
f 0
1
<?php
2
3
namespace dokuwiki\plugin\prosemirror\parser;
4
5
use dokuwiki\File\PageResolver;
6
7
class InternalLinkNode extends LinkNode
8
{
9
    public function toSyntax()
10
    {
11
        return $this->getDefaultLinkSyntax($this->attrs['data-inner']);
12
    }
13
14
    public static function render(\renderer_plugin_prosemirror $renderer, $originalId, $name)
15
    {
16
        global $ID;
17
        $additionalAttributes = [];
18
19
        $resolvedAttributes = self::resolveLink($originalId, $ID);
20
        $additionalAttributes['data-resolvedTitle'] = $resolvedAttributes['id'];
21
        $additionalAttributes['data-resolvedID'] = $resolvedAttributes['id'];
22
        if (!is_array($name)) {
23
            $additionalAttributes['data-resolvedName'] = $name ?: $resolvedAttributes['heading'];
24
            if ($resolvedAttributes['exists']) {
25
                $class = 'wikilink1';
26
            } else {
27
                $class = 'wikilink2';
28
            }
29
            $additionalAttributes['data-resolvedClass'] = $class;
30
        }
31
32
        self::renderToJSON(
33
            $renderer,
34
            'internallink',
35
            $originalId,
36
            $name,
37
            $additionalAttributes
38
        );
39
    }
40
41
    public static function resolveLink($inner, $curId)
42
    {
43
        $params = '';
44
        $parts = explode('?', $inner, 2);
45
        $resolvedPageId = $parts[0];
46
        if (count($parts) === 2) {
47
            $params = $parts[1];
48
        }
49
        $xhtml_renderer = p_get_renderer('xhtml');
50
        $default = $xhtml_renderer->_simpleTitle($parts[0]);
51
        $resolver = new PageResolver($curId);
52
        $resolvedPageId = $resolver->resolveId($resolvedPageId);
53
54
        if (useHeading('content')) {
55
            $heading = p_get_first_heading($resolvedPageId);
56
        }
57
        if (empty($heading)) {
58
            $heading = $default;
59
        }
60
61
        $url = wl($resolvedPageId, $params);
62
63
        return [
64
            'id' => $resolvedPageId,
65
            'exists' => page_exists($resolvedPageId),
66
            'heading' => $heading,
67
            'url' => $url,
68
        ];
69
    }
70
71
    protected static function getLinkTitle($title, $default, $id)
72
    {
73
        if (null === $title || trim($title) == '') {
74
            if (useHeading('content') && $id) {
75
                $heading = p_get_first_heading($id);
76
                if (!blank($heading)) {
77
                    return hsc($heading);
78
                }
79
            }
80
            return hsc($default);
81
        }
82
        return hsc($title);
83
    }
84
}
85