Globinours/app/Services/Asm3ResetService.php

76 lines
2.3 KiB
PHP

<?php
declare(strict_types=1);
final class Asm3ResetService
{
public static function clear(PDO $db): array
{
$before = [
'animals' => (int) $db->query('SELECT COUNT(*) FROM animals')->fetchColumn(),
'contacts' => (int) $db->query('SELECT COUNT(*) FROM directory_contacts')->fetchColumn(),
];
$tables = [
'agenda_volunteers',
'agenda_items',
'prescription_treatments',
'lab_results',
'medical_prescriptions',
'lab_reports',
'treatment_administrations',
'care_round_observations',
'animal_photos',
'medical_photos',
'animal_health_conditions',
'vaccinations',
'treatments',
'medical_notes',
'measurements',
'animal_placements',
'adoptions',
'animal_movements',
'animal_deaths',
'animal_location_history',
'animal_history',
'litter_kittens',
'litters',
'bonded_group_members',
'bonded_groups',
'care_rounds',
'icad_cache',
'asm3_import_links',
'asm3_import_runs',
'directory_contact_roles',
'animals',
'directory_contacts',
];
foreach ($tables as $table) {
$db->exec('DELETE FROM ' . $table);
}
return $before;
}
public static function clearMedia(): void
{
foreach (
[dirname(__DIR__, 2) . '/public/media/animals', dirname(__DIR__, 2) . '/data/medical-documents']
as $root
) {
if (!is_dir($root)) {
continue;
}
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($root, FilesystemIterator::SKIP_DOTS),
RecursiveIteratorIterator::CHILD_FIRST,
);
foreach ($iterator as $file) {
$path = $file->getPathname();
if ($file->isLink()) {
unlink($path);
} elseif ($file->isDir()) {
rmdir($path);
} else {
unlink($path);
}
}
}
}
}