summaryrefslogtreecommitdiff
path: root/src/model
diff options
context:
space:
mode:
Diffstat (limited to 'src/model')
-rw-r--r--src/model/Position.php22
-rw-r--r--src/model/entities/Page.php16
2 files changed, 25 insertions, 13 deletions
diff --git a/src/model/Position.php b/src/model/Position.php
index 74d173a..76de966 100644
--- a/src/model/Position.php
+++ b/src/model/Position.php
@@ -7,34 +7,30 @@ declare(strict_types=1);
7 7
8trait Position 8trait Position
9{ 9{
10 public function sortChildren(bool $reposition = false): void 10 public function sortChildren(bool $reindexation = false): void
11 { 11 {
12 // ordre du tableau des enfants 12 // tri par insertion du tableau des enfants
13 // inefficace quand des noeuds ont la même position
14
15 // tri par insertion avant affichage
16 for($i = 1; $i < count($this->children); $i++) 13 for($i = 1; $i < count($this->children); $i++)
17 { 14 {
18 $tmp = $this->children[$i]; 15 $tmp = $this->children[$i];
19 $j = $i - 1; 16 $j = $i - 1;
20 17
21 // Déplacez les éléments du tableau qui sont plus grands que la clé 18 // Déplacez les éléments du tableau qui sont plus grands que la clé à une position devant leur position actuelle
22 // à une position devant leur position actuelle 19 while($j >= 0 && $this->children[$j]->getPosition() > $tmp->getPosition()) {
23 while ($j >= 0 && $this->children[$j]->getPosition() > $tmp->getPosition()) {
24 $this->children[$j + 1] = $this->children[$j]; 20 $this->children[$j + 1] = $this->children[$j];
25 $j = $j - 1; 21 $j--;
26 } 22 }
27 $this->children[$j + 1] = $tmp; 23 $this->children[$j + 1] = $tmp;
28 } 24 }
29 25
30 foreach ($this->children as $child) { 26 foreach($this->children as $child) {
31 if (count($child->children) > 0) { 27 if(count($child->children) > 0) {
32 $child->sortChildren($reposition); 28 $child->sortChildren($reindexation);
33 } 29 }
34 } 30 }
35 31
36 // nouvelles positions (tableau $children => BDD) 32 // nouvelles positions (tableau $children => BDD)
37 if($reposition){ 33 if($reindexation){
38 $i = 1; 34 $i = 1;
39 foreach($this->children as $child){ 35 foreach($this->children as $child){
40 $child->setPosition($i); 36 $child->setPosition($i);
diff --git a/src/model/entities/Page.php b/src/model/entities/Page.php
index e3e60ca..aaff1ff 100644
--- a/src/model/entities/Page.php
+++ b/src/model/entities/Page.php
@@ -75,6 +75,10 @@ class Page
75 { 75 {
76 return $this->page_path; 76 return $this->page_path;
77 } 77 }
78 public function setPagePath(string $path):void
79 {
80 $this->page_path = $path;
81 }
78 public function getEndOfPath(): string 82 public function getEndOfPath(): string
79 { 83 {
80 return $this->end_of_path; 84 return $this->end_of_path;
@@ -107,6 +111,10 @@ class Page
107 { 111 {
108 return $this->parent; 112 return $this->parent;
109 } 113 }
114 public function setParent(?Page $parent): void
115 {
116 $this->parent = $parent;
117 }
110 public function getChildren(): Collection 118 public function getChildren(): Collection
111 { 119 {
112 return $this->children; 120 return $this->children;
@@ -125,6 +133,14 @@ class Page
125 $this->children[] = $child; 133 $this->children[] = $child;
126 $this->sortChildren(false); 134 $this->sortChildren(false);
127 } 135 }
136 public function removeChild(self $child): void
137 {
138 foreach($this->children as $index => $candidate){
139 if($candidate === $child){
140 unset($this->children[$index]);
141 }
142 }
143 }
128 144
129 public function findPageById(int $id): ?Page 145 public function findPageById(int $id): ?Page
130 { 146 {