| @@ 228-268 (lines=41) @@ | ||
| 225 | * @param int $levels The depth levels |
|
| 226 | * @return array The list of ID |
|
| 227 | */ |
|
| 228 | public static function getGroupsByDepthLevel($groupId, $levels = 10) |
|
| 229 | { |
|
| 230 | $groups = array(); |
|
| 231 | $groupId = intval($groupId); |
|
| 232 | ||
| 233 | $groupTable = Database::get_main_table(TABLE_MAIN_GROUP); |
|
| 234 | $groupRelGroupTable = Database :: get_main_table(TABLE_MAIN_GROUP_REL_GROUP); |
|
| 235 | ||
| 236 | $select = "SELECT "; |
|
| 237 | $from = "FROM $groupTable g1 "; |
|
| 238 | ||
| 239 | for ($i = 1; $i <= $levels; $i++) { |
|
| 240 | $tableIndexNumber = $i; |
|
| 241 | $tableIndexJoinNumber = $i - 1; |
|
| 242 | ||
| 243 | $select .= "g$i.id as id_$i "; |
|
| 244 | ||
| 245 | $select .= ($i != $levels ? ", " : null); |
|
| 246 | ||
| 247 | if ($i == 1) { |
|
| 248 | $from .= "INNER JOIN $groupRelGroupTable gg0 ON g1.id = gg0.subgroup_id and gg0.group_id = $groupId "; |
|
| 249 | } else { |
|
| 250 | $from .= "LEFT JOIN $groupRelGroupTable gg$tableIndexJoinNumber "; |
|
| 251 | $from .= " ON g$tableIndexJoinNumber.id = gg$tableIndexJoinNumber.group_id "; |
|
| 252 | $from .= "LEFT JOIN $groupTable g$tableIndexNumber "; |
|
| 253 | $from .= " ON gg$tableIndexJoinNumber.subgroup_id = g$tableIndexNumber.id "; |
|
| 254 | } |
|
| 255 | } |
|
| 256 | ||
| 257 | $result = Database::query("$select $from"); |
|
| 258 | ||
| 259 | while ($item = Database::fetch_assoc($result)) { |
|
| 260 | foreach ($item as $groupId) { |
|
| 261 | if (!empty($groupId)) { |
|
| 262 | $groups[] = $groupId; |
|
| 263 | } |
|
| 264 | } |
|
| 265 | } |
|
| 266 | ||
| 267 | return array_map('intval', $groups); |
|
| 268 | } |
|
| 269 | ||
| 270 | /** |
|
| 271 | * @param int $root |
|
| @@ 2285-2325 (lines=41) @@ | ||
| 2282 | * @param int $levels The depth levels |
|
| 2283 | * @return array The list of ID |
|
| 2284 | */ |
|
| 2285 | public static function getGroupsByDepthLevel($groupId, $levels = 10) |
|
| 2286 | { |
|
| 2287 | $groups = array(); |
|
| 2288 | $groupId = intval($groupId); |
|
| 2289 | ||
| 2290 | $groupTable = Database::get_main_table(TABLE_USERGROUP); |
|
| 2291 | $groupRelGroupTable = Database :: get_main_table(TABLE_USERGROUP_REL_USERGROUP); |
|
| 2292 | ||
| 2293 | $select = "SELECT "; |
|
| 2294 | $from = "FROM $groupTable g1 "; |
|
| 2295 | ||
| 2296 | for ($i = 1; $i <= $levels; $i++) { |
|
| 2297 | $tableIndexNumber = $i; |
|
| 2298 | $tableIndexJoinNumber = $i - 1; |
|
| 2299 | ||
| 2300 | $select .= "g$i.id as id_$i "; |
|
| 2301 | ||
| 2302 | $select .= ($i != $levels ? ", " : null); |
|
| 2303 | ||
| 2304 | if ($i == 1) { |
|
| 2305 | $from .= "INNER JOIN $groupRelGroupTable gg0 ON g1.id = gg0.subgroup_id and gg0.group_id = $groupId "; |
|
| 2306 | } else { |
|
| 2307 | $from .= "LEFT JOIN $groupRelGroupTable gg$tableIndexJoinNumber "; |
|
| 2308 | $from .= " ON g$tableIndexJoinNumber.id = gg$tableIndexJoinNumber.group_id "; |
|
| 2309 | $from .= "LEFT JOIN $groupTable g$tableIndexNumber "; |
|
| 2310 | $from .= " ON gg$tableIndexJoinNumber.subgroup_id = g$tableIndexNumber.id "; |
|
| 2311 | } |
|
| 2312 | } |
|
| 2313 | ||
| 2314 | $result = Database::query("$select $from"); |
|
| 2315 | ||
| 2316 | while ($item = Database::fetch_assoc($result)) { |
|
| 2317 | foreach ($item as $groupId) { |
|
| 2318 | if (!empty($groupId)) { |
|
| 2319 | $groups[] = $groupId; |
|
| 2320 | } |
|
| 2321 | } |
|
| 2322 | } |
|
| 2323 | ||
| 2324 | return array_map('intval', $groups); |
|
| 2325 | } |
|
| 2326 | ||
| 2327 | /** |
|
| 2328 | * Set a parent group |
|