*/ exit; require __DIR__.'/../../main/inc/global.inc.php'; $simulate = false; // Process script parameters if (PHP_SAPI !== 'cli') { die('This script can only be executed from the command line'); } if (!empty($argv[1]) && $argv[1] == '--from') { $from = $argv[2]; } if (!empty($argv[3]) && $argv[3] == '--until') { $until = $argv[4]; } if (!empty($argv[5]) && $argv[5] == '-s') { $simulate = true; echo "Simulation mode is enabled".PHP_EOL; } if (empty($from) or empty($until)) { echo PHP_EOL."Usage: sudo php ".basename(__FILE__)." [options]".PHP_EOL; echo "Where [options] can be ".PHP_EOL; echo " --from yyyy-mm-dd Date from which the content should be removed (e.g. 2017-08-31)".PHP_EOL.PHP_EOL; echo " --until yyyy-mm-dd Date up to which the content should be removed (e.g. 2020-08-31)".PHP_EOL.PHP_EOL; echo " -s (optional) Simulate execution - Do not delete anything, just show numbers".PHP_EOL.PHP_EOL; die('Please make sure --from and --until are defined.'); } echo "About to delete old personal files created between $from and $until.".PHP_EOL; echo deletePersonalFiles($from, $until, $simulate); /** * Delete all data from the tracking tables between the given dates and return a log string. * @param string $from 'yyyy-mm-dd' format date from which to start deleting * @param string $until 'yyyy-mm-dd' format date until which to delete * @param bool $simulate True if we only want to simulate the deletion and collect data * @return string */ function deletePersonalFiles(string $from, string $until, bool $simulate): string { $log = ''; $size = 0; if ($simulate) { $log .= 'Simulation mode ON'.PHP_EOL; } $table = Database::get_main_table(TABLE_MAIN_USER); // Get the list of sessions where access_end_date is within the given range $users = Database::select( 'id', $table, [ 'where' => 'status = 5', ] ); $fromTimestamp = api_strtotime($from); $untilTimestamp = api_strtotime($until); $log .= 'Found '.count($users).' non-privileged users to check'.PHP_EOL; foreach ($users as $user) { $path = UserManager::getUserPathById($user['id'], 'system'); if (is_dir($path)) { $folderCreationDate = filectime($path); $log .= $path.' was created on '.date('Y-m-d', $folderCreationDate).PHP_EOL; if ($folderCreationDate > $fromTimestamp and $folderCreationDate <= $untilTimestamp) { $log .= 'Folder '.$path.' matches creation time span. Deleting...'.PHP_EOL; $size += folderSize($path); if (!$simulate) { my_delete($path); } } } } $log .= 'Deleted '.$size.'B user files in total.'.PHP_EOL; return $log; } function folderSize($dir) { $size = 0; $contents = glob(rtrim($dir, '/').'/*', GLOB_NOSORT); foreach ($contents as $contents_value) { if (is_file($contents_value)) { $size += filesize($contents_value); } else { $size += folderSize($contents_value); } } return $size; }