From 68b830e10fbd203c2b97e918634586ad07c32a59 Mon Sep 17 00:00:00 2001 From: Thomas Hackl Date: Wed, 6 Aug 2025 11:57:43 +0200 Subject: import default stock images via migration --- .../6.1.16_import_default_stock_images.php | 103 +++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 db/migrations/6.1.16_import_default_stock_images.php diff --git a/db/migrations/6.1.16_import_default_stock_images.php b/db/migrations/6.1.16_import_default_stock_images.php new file mode 100644 index 0000000..86debfc --- /dev/null +++ b/db/migrations/6.1.16_import_default_stock_images.php @@ -0,0 +1,103 @@ +open($zipFile); + if ($res) { + $zip->extractTo($extractPath); + $zip->close(); + } else { + unlink($zipFile); + die('Could not open zip file.'); + } + + // Get metadata and create stock images if not already present. + $csv_file = file($extractPath . 'meta.csv'); + if (!$csv_file) { + $this->cleanup($extractPath); + unlink($zipFile); + die('No meta.csv file provided.'); + } + + $rows = array_map( + fn($v) => str_getcsv($v, ';'), + $csv_file + ); + $header = array_shift($rows); + + $images = []; + foreach ($rows as $row) { + $images[] = array_combine($header, $row); + } + + foreach ($images as $meta) { + $filename = $meta['filename']; + if (!$filename) { + continue; + } + + // Import file only if it doesn't already exist + if (!StockImage::findOneByDescription($meta['description'] ?? 'STOCKIMAGE')) { + $filepath = $extractPath . $filename; + $filesize = filesize($filepath); + $imagesize = getimagesize($filepath); + + $image = \StockImage::create([ + 'title' => $meta['title'] ?? 'unknown', + 'description' => $meta['description'] ?? '', + 'license' => $meta['license'] ?? '', + 'author' => $meta['author'] ?? '', + 'height' => $imagesize[1], + 'width' => $imagesize[0], + 'mime_type' => $imagesize['mime'], + 'size' => $filesize, + 'tags' => json_encode(explode(',', $meta['tags'])), + ]); + + copy($filepath, $image->getPath()); + $scaler = new \Studip\StockImages\Scaler(); + $scaler($image); + $paletteCreator = new \Studip\StockImages\PaletteCreator(); + $paletteCreator($image); + } + } + + $this->cleanup($extractPath); + unlink($zipFile); + } + + private function cleanup($path) + { + $iterator = new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::SKIP_DOTS); + $files = new RecursiveIteratorIterator($iterator, + RecursiveIteratorIterator::CHILD_FIRST); + foreach($files as $file) { + if ($file->isDir()){ + rmdir($file->getPathname()); + } else { + unlink($file->getPathname()); + } + } + rmdir($path); + } + +} -- cgit v1.0