Remove explicit ACL entries for a folder subtree. */
(string $folder)
| 311 | |
| 312 | /** Remove explicit ACL entries for a folder subtree. */ |
| 313 | public static function deleteTree(string $folder): array |
| 314 | { |
| 315 | $prefix = self::normalizeFolder($folder); |
| 316 | if ($prefix === '' || $prefix === 'root') { |
| 317 | return ['changed' => false, 'removed' => 0]; |
| 318 | } |
| 319 | |
| 320 | $acl = self::$cache ?? self::loadFresh(); |
| 321 | if (!isset($acl['folders']) || !is_array($acl['folders'])) { |
| 322 | return ['changed' => false, 'removed' => 0]; |
| 323 | } |
| 324 | |
| 325 | $needle = $prefix . '/'; |
| 326 | $removed = 0; |
| 327 | foreach (array_keys($acl['folders']) as $key) { |
| 328 | if ($key === $prefix || strpos($key, $needle) === 0) { |
| 329 | unset($acl['folders'][$key]); |
| 330 | $removed++; |
| 331 | } |
| 332 | } |
| 333 | |
| 334 | if ($removed > 0) { |
| 335 | self::save($acl); |
| 336 | return ['changed' => true, 'removed' => $removed]; |
| 337 | } |
| 338 | |
| 339 | return ['changed' => false, 'removed' => 0]; |
| 340 | } |
| 341 | |
| 342 | private static function loadFresh(): array |
| 343 | { |
no test coverage detected