$xml = simplexml_load_string($xmlraw); $root = ""; $memorypatch = false; if (isset($xml["root"])) { $root = $xml["root"]; } foreach ($_POST as $option => $patchesraw) { if (!empty($patchesraw)) { $patches = explode(";", $patchesraw); foreach ($patches as $patchunique) { $patchnode = $xml->xpath("./patch[@id='{$patchunique}']"); if (count($patchnode) > 0) { foreach ($patchnode[0] as $replacementnode) { switch ($replacementnode->getName()) { case "file": addReplacement($replacements, "files/" . $replacementnode['disc'], $sd . $root . $replacementnode['external']); break; case "folder": $recursive = true; if (isset($replacementnode['recursive'])) { if ($replacementnode['recursive'] == "false") { $recursive = false; } } $externalfull = $sd . $root . "/" . $replacementnode['external']; if (isset($replacementnode['disc'])) { $prefix = "files/" . $replacementnode['disc']; } else { $prefix = null; } folderScrape($replacements, $index, $externalfull, $recursive, false, $prefix, $externalfull);
function folderScrape(&$replacements, $index, $directory, $resursive, $plainfile = false, $prefix = null, $external = null) { if (isset($directory) && is_readable($directory)) { if ($resursive) { $directory = realpath($directory); $objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory)); foreach ($objects as $entry => $object) { $entry = str_replace($directory, '', $entry); if (basename($entry) == "." || basename($entry) == "..") { continue; } $externalfull = completeExternal($external, $entry); $discfull = completeDisc($index, $prefix, $entry, $externalfull); //verbose($externalfull . " >> " . $discfull); if (isset($discfull)) { if ($plainfile) { addPlain($replacements, $discfull); } else { addReplacement($replacements, $discfull, $externalfull); } } } } else { $it = new DirectoryIterator($directory); foreach ($it as $entry) { if (!$it->isDot()) { $externalfull = completeExternal($external, $entry); $discfull = completeDisc($index, $prefix, $entry, $externalfull); if (isset($discfull)) { if ($plainfile) { addPlain($replacements, $discfull); } else { addReplacement($replacements, $discfull, $externalfull); } } } } } } }