<?php
 include __DIR__.'/../../includes/functions/func_file.inc.php'; function return_bytes($string) { sscanf($string, '%u%c', $number, $suffix); if (isset($suffix)) { $number = $number * pow(1024, strpos(' KMG', strtoupper($suffix))); } return $number; } function perform_action($action, $payload, $on_error='skip') { switch ($action) { case 'copy': foreach ($payload as $source => $target) { if (defined('DISABLE_FILE_MIGRATIONS') && filter_var(DISABLE_FILE_MIGRATIONS, FILTER_VALIDATE_BOOLEAN)) { if (!preg_match('#^'. preg_quote(FS_DIR_STORAGE, '#') .'#', $target)) continue; } echo 'Copying '. preg_replace('#^('. preg_quote(FS_DIR_STORAGE, '#') .'|'. preg_quote(FS_DIR_APP, '#') .')#', '', $source) .' to '. preg_replace('#^('. preg_quote(FS_DIR_STORAGE, '#') .'|'. preg_quote(FS_DIR_APP, '#') .')#', '', $target); if (file_xcopy($source, $target, $results)) { echo ' <span class="ok">[OK]</span><br><br>' . PHP_EOL . PHP_EOL; } else if ($on_error == 'skip') { echo ' <span class="warning">[Skipped]</span><br><br>' . PHP_EOL . PHP_EOL; } else { die(' <span class="error">[Error]</span><br><br>' . PHP_EOL . PHP_EOL); } } break; case 'delete': foreach ($payload as $source) { if (defined('DISABLE_FILE_MIGRATIONS') && filter_var(DISABLE_FILE_MIGRATIONS, FILTER_VALIDATE_BOOLEAN)) { if (!preg_match('#^'. preg_quote(FS_DIR_STORAGE, '#') .'#', $source)) continue; } echo 'Deleting '. preg_replace('#^('. preg_quote(FS_DIR_STORAGE, '#') .'|'. preg_quote(FS_DIR_APP, '#') .')#', '', $source); if (file_delete($source, $results)) { echo ' <span class="ok">[OK]</span><br><br>' . PHP_EOL . PHP_EOL; } else if ($on_error == 'skip') { echo ' <span class="warning">[Skipped]</span><br><br>' . PHP_EOL . PHP_EOL; } else { die(' <span class="error">[Error]</span><br><br>' . PHP_EOL . PHP_EOL); } } break; case 'move': case 'rename': foreach ($payload as $source => $target) { if (defined('DISABLE_FILE_MIGRATIONS') && filter_var(DISABLE_FILE_MIGRATIONS, FILTER_VALIDATE_BOOLEAN)) { if (!preg_match('#^'. preg_quote(FS_DIR_STORAGE, '#') .'#', $source)) continue; } echo 'Moving '. preg_replace('#^('. preg_quote(FS_DIR_STORAGE, '#') .'|'. preg_quote(FS_DIR_APP, '#') .')#', '', $source) .' to '. preg_replace('#^('. preg_quote(FS_DIR_STORAGE, '#') .'|'. preg_quote(FS_DIR_APP, '#') .')#', '', $target); if (file_move($source, $target, $results)) { echo ' <span class="ok">[OK]</span><br><br>' . PHP_EOL . PHP_EOL; } else if ($on_error == 'skip') { echo ' <span class="warning">[Skipped]</span><br><br>' . PHP_EOL . PHP_EOL; } else { die(' <span class="error">[Error]</span><br><br>' . PHP_EOL . PHP_EOL); } } break; case 'modify': foreach ($payload as $source => $operations) { if (defined('DISABLE_FILE_MIGRATIONS') && filter_var(DISABLE_FILE_MIGRATIONS, FILTER_VALIDATE_BOOLEAN)) { if (!preg_match('#^'. preg_quote(FS_DIR_STORAGE, '#') .'#', $source)) continue; } echo 'Modifying ' . preg_replace('#^('. preg_quote(FS_DIR_STORAGE, '#') .'|'. preg_quote(FS_DIR_APP, '#') .')#', '', $source); $results = []; if (!$files = file_search($source)) { $results[] = false; } foreach ($files as $file) { $contents = file_get_contents($file); $contents = preg_replace('#(\r\n?|\n)#u', PHP_EOL, $contents); foreach ($operations as $operation) { if (!empty($operations['regex'])) { $contents = preg_replace($operation['search'], $operation['replace'], $contents, -1, $count); } else { $contents = str_replace($operation['search'], $operation['replace'], $contents, $count); } $results[] = $count ? true : false; } $results[] = file_put_contents($file, $contents); } if (!in_array(false, $results)) { echo ' <span class="ok">[OK]</span><br><br>' . PHP_EOL . PHP_EOL; } else if ($on_error == 'skip') { echo ' <span class="warning">[Skipped]</span><br><br>' . PHP_EOL . PHP_EOL; } else { die(' <span class="error">[Error]</span><br><br>' . PHP_EOL . PHP_EOL); } } break; default: throw new Error("Unknown action ($action)"); } } 