TableCell::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 5
dl 0
loc 7
c 0
b 0
f 0
rs 10
cc 1
nc 1
nop 5
1
<?php
2
3
declare(strict_types=1);
4
5
namespace DH\Adf\Node\Child;
6
7
use DH\Adf\Builder\BlockquoteBuilder;
8
use DH\Adf\Builder\BulletListBuilder;
9
use DH\Adf\Builder\CodeblockBuilder;
10
use DH\Adf\Builder\HeadingBuilder;
11
use DH\Adf\Builder\MediaGroupBuilder;
12
use DH\Adf\Builder\MediaSingleBuilder;
13
use DH\Adf\Builder\OrderedListBuilder;
14
use DH\Adf\Builder\PanelBuilder;
15
use DH\Adf\Builder\ParagraphBuilder;
16
use DH\Adf\Builder\RuleBuilder;
17
use DH\Adf\Builder\TaskListBuilder;
18
use DH\Adf\Node\Block\Blockquote;
19
use DH\Adf\Node\Block\BulletList;
20
use DH\Adf\Node\Block\CodeBlock;
21
use DH\Adf\Node\Block\Heading;
22
use DH\Adf\Node\Block\MediaGroup;
23
use DH\Adf\Node\Block\MediaSingle;
24
use DH\Adf\Node\Block\OrderedList;
25
use DH\Adf\Node\Block\Panel;
26
use DH\Adf\Node\Block\Paragraph;
27
use DH\Adf\Node\Block\Rule;
28
use DH\Adf\Node\Block\TaskList;
29
use DH\Adf\Node\BlockNode;
30
use DH\Adf\Node\Node;
31
use JsonSerializable;
32
33
/**
34
 * @see https://developer.atlassian.com/cloud/jira/platform/apis/document/nodes/table_cell
35
 */
36
class TableCell extends BlockNode implements JsonSerializable
37
{
38
    use BlockquoteBuilder;
39
    use BulletListBuilder;
40
    use CodeblockBuilder;
41
    use HeadingBuilder;
42
    use MediaGroupBuilder;
43
    use MediaSingleBuilder;
44
    use OrderedListBuilder;
45
    use PanelBuilder;
46
    use ParagraphBuilder;
47
    use RuleBuilder;
48
    use TaskListBuilder;
49
50
    protected string $type = 'tableCell';
51
    protected array $allowedContentTypes = [
52
        Blockquote::class,
53
        BulletList::class,
54
        CodeBlock::class,
55
        Heading::class,
56
        MediaGroup::class,
57
        MediaSingle::class,
58
        OrderedList::class,
59
        Panel::class,
60
        Paragraph::class,
61
        Rule::class,
62
        TaskList::class,
63
    ];
64
    private ?string $background;
65
    private ?int $colspan;
66
    private ?int $rowspan;
67
    private ?array $colwidth;
68
69
    public function __construct(?string $background = null, ?int $colspan = null, ?int $rowspan = null, ?array $colwidth = null, ?BlockNode $parent = null)
70
    {
71
        parent::__construct($parent);
72
        $this->background = $background;
73
        $this->colspan = $colspan;
74
        $this->rowspan = $rowspan;
75
        $this->colwidth = $colwidth;
76
    }
77
78
    public static function load(array $data, ?BlockNode $parent = null): self
79
    {
80
        self::checkNodeData(static::class, $data);
81
82
        $node = new self(
83
            $data['attrs']['background'] ?? null,
84
            $data['attrs']['colspan'] ?? null,
85
            $data['attrs']['rowspan'] ?? null,
86
            $data['attrs']['colwidth'] ?? null,
87
            $parent
88
        );
89
90
        // set content if defined
91
        if (\array_key_exists('content', $data)) {
92
            foreach ($data['content'] as $nodeData) {
93
                $class = Node::NODE_MAPPING[$nodeData['type']];
94
                $child = $class::load($nodeData, $node);
95
96
                $node->append($child);
97
            }
98
        }
99
100
        return $node;
101
    }
102
103
    public function getBackground(): ?string
104
    {
105
        return $this->background;
106
    }
107
108
    public function getColspan(): ?int
109
    {
110
        return $this->colspan;
111
    }
112
113
    public function getRowspan(): ?int
114
    {
115
        return $this->rowspan;
116
    }
117
118
    public function getColwidth(): ?array
119
    {
120
        return $this->colwidth;
121
    }
122
123
    protected function attrs(): array
124
    {
125
        $attrs = parent::attrs();
126
127
        if ($this->background) {
128
            $attrs['background'] = $this->background;
129
        }
130
        if (null !== $this->colspan) {
131
            $attrs['colspan'] = $this->colspan;
132
        }
133
        if (null !== $this->rowspan) {
134
            $attrs['rowspan'] = $this->rowspan;
135
        }
136
        if (\is_array($this->colwidth)) {
137
            $attrs['colwidth'] = $this->colwidth;
138
        }
139
140
        return $attrs;
141
    }
142
}
143