PluginProbe
GiveWP – Donation Plugin and Fundraising Platform / 2.19.6
GiveWP – Donation Plugin and Fundraising Platform v2.19.6
4.16.8 4.16.7.2 4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 All 253 releases
give / src / Framework / FieldsAPI / Concerns / InsertNode.php

InsertNode.php in GiveWP – Donation Plugin and Fundraising Platform 2.19.6, at src/Framework/FieldsAPI/Concerns/InsertNode.php

141 lines 3.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Give\Framework\FieldsAPI\Concerns;
4
5 use Give\Framework\FieldsAPI\Contracts\Collection;
6 use Give\Framework\FieldsAPI\Contracts\Node;
7 use Give\Framework\FieldsAPI\Exceptions\ReferenceNodeNotFoundException;
8
9 /**
10 * @since 2.10.2
11 */
12 trait InsertNode
13 {
14
15 /**
16 * @since 2.10.2
17 *
18 * @param string $siblingName
19 * @param Node $node
20 *
21 * @return $this
22 * @throws ReferenceNodeNotFoundException
23 */
24 public function insertAfter($siblingName, Node $node)
25 {
26 $this->checkNameCollisionDeep($node);
27 $this->insertAfterRecursive($siblingName, $node);
28
29 return $this;
30 }
31
32 /**
33 * @since 2.10.2
34 *
35 * @param string $siblingName
36 * @param Node $node
37 *
38 * @return void
39 * @throws ReferenceNodeNotFoundException
40 *
41 */
42 protected function insertAfterRecursive($siblingName, Node $node)
43 {
44 $siblingIndex = $this->getNodeIndexByName($siblingName);
45 if (false !== $siblingIndex) {
46 $this->insertAtIndex(
47 $siblingIndex + 1,
48 $node
49 );
50
51 return;
52 }
53
54 if ($this->nodes) {
55 foreach ($this->nodes as $childNode) {
56 if ($childNode instanceof Collection) {
57 $childNode->insertAfter($siblingName, $node);
58 }
59 }
60
61 return;
62 }
63
64 throw new ReferenceNodeNotFoundException($siblingName);
65 }
66
67 /**
68 * @since 2.10.2
69 *
70 * @param string $siblingName
71 * @param Node $node
72 *
73 * @return $this
74 * @throws ReferenceNodeNotFoundException
75 *
76 */
77 public function insertBefore($siblingName, Node $node)
78 {
79 $this->checkNameCollisionDeep($node);
80 $this->insertBeforeRecursive($siblingName, $node);
81
82 return $this;
83 }
84
85 /**
86 * @since 2.10.2
87 *
88 * @param string $siblingName
89 * @param Node $node
90 *
91 * @return void
92 * @throws ReferenceNodeNotFoundException
93 *
94 */
95 protected function insertBeforeRecursive($siblingName, Node $node)
96 {
97 $siblingIndex = $this->getNodeIndexByName($siblingName);
98 if (false !== $siblingIndex) {
99 $this->insertAtIndex(
100 $siblingIndex - 1,
101 $node
102 );
103
104 return;
105 }
106
107 if ($this->nodes) {
108 foreach ($this->nodes as $childNode) {
109 if ($childNode instanceof Collection) {
110 $childNode->insertBefore($siblingName, $node);
111 }
112 }
113
114 return;
115 }
116
117 throw new ReferenceNodeNotFoundException($siblingName);
118 }
119
120 /**
121 * @since 2.10.2
122 */
123 protected function insertAtIndex($index, $node)
124 {
125 $this->checkNameCollisionDeep($node);
126 array_splice($this->nodes, $index, 0, [$node]);
127 }
128
129 /**
130 * {@inheritdoc}
131 */
132 public function append(Node ...$nodes)
133 {
134 foreach ($nodes as $node) {
135 $this->insertAtIndex($this->count(), $node);
136 }
137
138 return $this;
139 }
140 }
141