fpietka /
Zend-Nested-Set
This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
| 1 | <?php |
||
| 2 | |||
| 3 | class Nestedset_Model_Reader |
||
| 4 | { |
||
| 5 | /** |
||
| 6 | * Get all elements from nested set |
||
| 7 | * |
||
| 8 | * @param $model|NestedSet_Model Nested set model |
||
| 9 | * @param $depth|array Array of depth wanted. Default is all |
||
| 10 | * @param $mode|string Mode of depth selection: include/exclude |
||
| 11 | * @param $order|string Mode of sort |
||
| 12 | * |
||
| 13 | * @return array |
||
| 14 | */ |
||
| 15 | public function getAll(NestedSet_Model $nestedset, $depth = null, $mode = 'include', $order = 'ASC') |
||
| 16 | { |
||
| 17 | $db = $nestedset->getDb(); |
||
| 18 | |||
| 19 | $query = " |
||
| 20 | SELECT |
||
| 21 | node.{$nestedset->getStructureId()}, |
||
| 22 | node.{$nestedset->getStructureName()}, |
||
| 23 | node.{$nestedset->getStructureLeft()}, |
||
| 24 | node.{$nestedset->getStructureRight()}, |
||
| 25 | COUNT(parent.{$nestedset->getStructureName()}) - 1 AS depth |
||
| 26 | FROM |
||
| 27 | {$nestedset->getTableName()} AS node, |
||
| 28 | {$nestedset->getTableName()} AS parent |
||
| 29 | WHERE node.{$nestedset->getStructureLeft()} BETWEEN parent.{$nestedset->getStructureLeft()} AND parent.{$nestedset->getStructureRight()} |
||
| 30 | GROUP BY node.{$nestedset->getStructureId()}, node.{$nestedset->getStructureName()}, node.{$nestedset->getStructureLeft()}, node.{$nestedset->getStructureRight()} |
||
| 31 | "; |
||
| 32 | |||
| 33 | // Handle depth if required |
||
| 34 | if (!is_null($depth)) { |
||
| 35 | if (!is_array($depth)) { |
||
| 36 | $depth = (int) $depth; |
||
| 37 | |||
| 38 | if ($mode == 'exclude') { |
||
| 39 | $mode = '='; |
||
| 40 | } else { |
||
| 41 | $mode = '!='; |
||
| 42 | } |
||
| 43 | |||
| 44 | $query .= "HAVING COUNT(parent.{$nestedset->getStructureName()}) - 1 $mode $depth"; |
||
| 45 | } else { |
||
| 46 | foreach ($depth as &$one) { |
||
| 47 | $one = (int) $one; |
||
| 48 | } |
||
| 49 | $depth = implode(', ', $depth); |
||
| 50 | |||
| 51 | if ($mode == 'exclude') { |
||
| 52 | $mode = 'NOT IN'; |
||
| 53 | } else { |
||
| 54 | $mode = 'IN'; |
||
| 55 | } |
||
| 56 | |||
| 57 | $query .= "HAVING COUNT(parent.{$nestedset->getStructureName()}) - 1 $mode ($depth)"; |
||
| 58 | } |
||
| 59 | } |
||
| 60 | |||
| 61 | $query .= " ORDER BY node.{$nestedset->getStructureLeft()} $order;"; |
||
| 62 | |||
| 63 | $stmt = $db->query($query); |
||
| 64 | $nodes = $stmt->fetchAll(); |
||
| 65 | |||
| 66 | return $nodes; |
||
| 67 | } |
||
| 68 | |||
| 69 | /** |
||
| 70 | * Get one element with its children. |
||
| 71 | * @TODO depth |
||
| 72 | * |
||
| 73 | * @param $model|NestedSet_Model Nested set model |
||
| 74 | * @param $elementId|int Element Id |
||
| 75 | * @param $depth|int Optional, depth of the tree. Default null means |
||
| 76 | * full tree |
||
| 77 | * |
||
| 78 | * @return array |
||
| 79 | */ |
||
| 80 | public function getElement(NestedSet_Model $nestedset, $elementId, $depth = null, $order = 'ASC') |
||
|
0 ignored issues
–
show
|
|||
| 81 | { |
||
| 82 | // @TODO: test -> if multiple elements with depth 1 are found -> error |
||
| 83 | $db = $nestedset->getDb(); |
||
| 84 | |||
| 85 | // Get main element left and right |
||
| 86 | $select = $db |
||
| 87 | ->select() |
||
| 88 | ->from($nestedset->getTableName(), array($nestedset->getStructureLeft(), $nestedset->getStructureRight())) |
||
| 89 | ->where($nestedset->getStructureId() . ' = ?', $elementId); |
||
| 90 | |||
| 91 | $stmt = $db->query($select); |
||
| 92 | $element = $stmt->fetch(); |
||
| 93 | |||
| 94 | // Get the tree |
||
| 95 | $query = " |
||
| 96 | SELECT |
||
| 97 | node.{$nestedset->getStructureId()}, |
||
| 98 | node.{$nestedset->getStructureName()}, |
||
| 99 | node.{$nestedset->getStructureLeft()}, |
||
| 100 | node.{$nestedset->getStructureRight()}, |
||
| 101 | COUNT(parent.{$nestedset->getStructureName()}) - 1 AS depth |
||
| 102 | FROM |
||
| 103 | {$nestedset->getTableName()} AS node, |
||
| 104 | {$nestedset->getTableName()} AS parent |
||
| 105 | WHERE node.{$nestedset->getStructureLeft()} BETWEEN parent.{$nestedset->getStructureLeft()} AND parent.{$nestedset->getStructureRight()} |
||
| 106 | AND node.{$nestedset->getStructureLeft()} BETWEEN {$element[$nestedset->getStructureLeft()]} AND {$element[$nestedset->getStructureRight()]} |
||
| 107 | GROUP BY node.{$nestedset->getStructureId()}, node.{$nestedset->getStructureName()}, node.{$nestedset->getStructureLeft()}, node.{$nestedset->getStructureRight()} |
||
| 108 | ORDER BY node.{$nestedset->getStructureLeft()} $order |
||
| 109 | "; |
||
| 110 | |||
| 111 | $stmt = $db->query($query); |
||
| 112 | $nodes = $stmt->fetchAll(); |
||
| 113 | |||
| 114 | return $nodes; |
||
| 115 | } |
||
| 116 | |||
| 117 | /** |
||
| 118 | * Get width of a node |
||
| 119 | * |
||
| 120 | * @param $model|NestedSet_Model Nested set model |
||
| 121 | * @param $elementId|int Id of the node |
||
| 122 | * |
||
| 123 | * @return int |
||
| 124 | */ |
||
| 125 | public function getNodeWidth(NestedSet_Model $nestedset, $elementId) |
||
| 126 | { |
||
| 127 | $db = $nestedset->getDb(); |
||
| 128 | |||
| 129 | $stmt = $db->query(" |
||
| 130 | SELECT {$nestedset->getStructureRight()} - {$nestedset->getStructureLeft()} + 1 |
||
| 131 | FROM {$nestedset->getTableName()} |
||
| 132 | WHERE {$nestedset->getStructureId()} = $elementId |
||
| 133 | "); |
||
| 134 | $width = $stmt->fetchColumn(); |
||
| 135 | |||
| 136 | return $width; |
||
| 137 | } |
||
| 138 | |||
| 139 | /** |
||
| 140 | * Get all nodes without children |
||
| 141 | * |
||
| 142 | * @param $model|NestedSet_Model Nested set model |
||
| 143 | * |
||
| 144 | * @return array |
||
| 145 | */ |
||
| 146 | public function getLeafs(NestedSet_Model $nestedset) |
||
| 147 | { |
||
| 148 | $db = $nestedset->getDb(); |
||
| 149 | |||
| 150 | $select = $db |
||
| 151 | ->select() |
||
| 152 | ->from($nestedset->getTableName(), array($nestedset->getStructureId(), $nestedset->getStructureName())) |
||
| 153 | ->where("{$nestedset->getStructureRight()} = {$nestedset->getStructureLeft()} + 1"); |
||
| 154 | |||
| 155 | $stmt = $db->query($select); |
||
| 156 | $result = $stmt->fetchAll(); |
||
| 157 | |||
| 158 | return $result; |
||
| 159 | } |
||
| 160 | |||
| 161 | /** |
||
| 162 | * Get path of an element |
||
| 163 | * |
||
| 164 | * @param $model|NestedSet_Model Nested set model |
||
| 165 | * @param $elementId|int Id of the element we want the path of |
||
| 166 | * |
||
| 167 | * @return array |
||
| 168 | */ |
||
| 169 | public function getPath(NestedSet_Model $nestedset, $elementId, $order = 'ASC') |
||
| 170 | { |
||
| 171 | $db = $nestedset->getDb(); |
||
| 172 | |||
| 173 | $query = " |
||
| 174 | SELECT |
||
| 175 | node.{$nestedset->getStructureId()}, |
||
| 176 | node.{$nestedset->getStructureName()}, |
||
| 177 | COUNT(parent.{$nestedset->getStructureName()}) - 1 AS depth |
||
| 178 | FROM |
||
| 179 | {$nestedset->getTableName()} AS node, |
||
| 180 | {$nestedset->getTableName()} AS parent |
||
| 181 | WHERE node.{$nestedset->getStructureLeft()} BETWEEN parent.{$nestedset->getStructureLeft()} AND parent.{$nestedset->getStructureRight()} |
||
| 182 | AND node.{$nestedset->getStructureId()} = $elementId |
||
| 183 | GROUP BY node.{$nestedset->getStructureId()}, node.{$nestedset->getStructureName()}, node.{$nestedset->getStructureLeft()} |
||
| 184 | ORDER BY node.{$nestedset->getStructureLeft()} $order; |
||
| 185 | "; |
||
| 186 | |||
| 187 | $stmt = $db->query($query); |
||
| 188 | $path = $stmt->fetchAll(); |
||
| 189 | |||
| 190 | return $path; |
||
| 191 | } |
||
| 192 | |||
| 193 | /** |
||
| 194 | * Get the parent of an element. |
||
| 195 | * |
||
| 196 | * @param $model|NestedSet_Model Nested set model |
||
| 197 | * @param $elementId|int Element ID |
||
| 198 | * @param $depth|int Depth of the parent, compared to the child. |
||
| 199 | * Default is 1 (as immediate) |
||
| 200 | * |
||
| 201 | * @return array|false |
||
| 202 | */ |
||
| 203 | public function getParent(NestedSet_Model $nestedset, $elementId, $depth = 1) |
||
| 204 | { |
||
| 205 | $db = $nestedset->getDb(); |
||
| 206 | |||
| 207 | $select = $db |
||
| 208 | ->select() |
||
| 209 | ->from($nestedset->getTableName(), array($nestedset->getStructureLeft(), $nestedset->getStructureRight())) |
||
| 210 | ->where($nestedset->getStructureId() . ' = ?', $elementId); |
||
| 211 | |||
| 212 | $stmt = $db->query($select); |
||
| 213 | $child = $stmt->fetch(); |
||
| 214 | |||
| 215 | $select = $db |
||
| 216 | ->select() |
||
| 217 | ->from($nestedset->getTableName(), array($nestedset->getStructureId(), $nestedset->getStructureName())) |
||
| 218 | ->where($nestedset->getStructureLeft() . ' < ?', $child[$nestedset->getStructureLeft()]) |
||
| 219 | ->where($nestedset->getStructureRight() . ' > ?', $child[$nestedset->getStructureRight()]) |
||
| 220 | ->order('(' . $child[$nestedset->getStructureLeft()] . ' - ' . $nestedset->getStructureLeft() . ')') |
||
| 221 | ->limitPage($depth, 1); |
||
| 222 | |||
| 223 | $stmt = $db->query($select); |
||
| 224 | $result = $stmt->fetch(); |
||
| 225 | |||
| 226 | return $result; |
||
| 227 | } |
||
| 228 | |||
| 229 | /** |
||
| 230 | * Returns if the element is root. |
||
| 231 | * |
||
| 232 | * @param $model|NestedSet_Model Nested set model |
||
| 233 | * @param $elementId|int Element ID |
||
| 234 | * |
||
| 235 | * @return boolean |
||
| 236 | */ |
||
| 237 | public function isRoot(NestedSet_Model $nestedset, $elementId) |
||
| 238 | { |
||
| 239 | $db = $nestedset->getDb(); |
||
| 240 | |||
| 241 | $query = " |
||
| 242 | SELECT 1 |
||
| 243 | FROM {$nestedset->getTableName()} |
||
| 244 | WHERE {$nestedset->getStructureId()} = $elementId |
||
| 245 | AND {$nestedset->getStructureLeft()} = ( |
||
| 246 | SELECT MIN({$nestedset->getStructureLeft()}) |
||
| 247 | FROM {$nestedset->getTableName()} |
||
| 248 | ) |
||
| 249 | AND {$nestedset->getStructureRight()} = ( |
||
| 250 | SELECT MAX({$nestedset->getStructureRight()}) |
||
| 251 | FROM {$nestedset->getTableName()} |
||
| 252 | ) |
||
| 253 | "; |
||
| 254 | |||
| 255 | $stmt = $db->query($query); |
||
| 256 | $result = $stmt->fetchColumn(); |
||
| 257 | |||
| 258 | return (boolean) $result; |
||
| 259 | } |
||
| 260 | } |
||
| 261 |
This check looks from parameters that have been defined for a function or method, but which are not used in the method body.