ManufacturerSetupService.php (3294B)
1 <?php 2 3 namespace PartKeepr\SetupBundle\Services; 4 5 use Doctrine\ORM\EntityManager; 6 use PartKeepr\ManufacturerBundle\Entity\Manufacturer; 7 use PartKeepr\ManufacturerBundle\Entity\ManufacturerICLogo; 8 use PartKeepr\UploadedFileBundle\Services\UploadedFileService; 9 use Symfony\Component\HttpFoundation\File\File; 10 use Symfony\Component\HttpKernel\KernelInterface; 11 use Symfony\Component\Yaml\Parser; 12 13 class ManufacturerSetupService 14 { 15 const MANUFACTURER_PATH = '@PartKeeprSetupBundle/Resources/setup-data/manufacturers/'; 16 const MANUFACTURER_DATA = 'manufacturers.yml'; 17 18 /** 19 * @var EntityManager 20 */ 21 private $entityManager; 22 23 /** 24 * @var UploadedFileService 25 */ 26 private $uploadedFileService; 27 28 /** 29 * @var KernelInterface 30 */ 31 private $kernel; 32 33 public function __construct( 34 EntityManager $entityManager, 35 UploadedFileService $uploadedFileService, 36 KernelInterface $kernel 37 ) { 38 $this->entityManager = $entityManager; 39 $this->uploadedFileService = $uploadedFileService; 40 $this->kernel = $kernel; 41 } 42 43 /** 44 * Imports manufacturers. 45 * 46 * @return array An array with the keys "skipped" and "imported" which contain the number of manufacturers skipped and imported 47 */ 48 public function importManufacturers() 49 { 50 $path = $this->kernel->locateResource(self::MANUFACTURER_PATH.self::MANUFACTURER_DATA); 51 52 $skipped = 0; 53 $count = 0; 54 $yaml = new Parser(); 55 $data = $yaml->parse(file_get_contents($path)); 56 57 foreach ($data as $manufacturerName => $manufacturerData) { 58 if ($this->manufacturerExists($manufacturerName)) { 59 $skipped++; 60 continue; 61 } 62 63 $this->createManufacturer($manufacturerName, $manufacturerData); 64 $count++; 65 } 66 67 $this->entityManager->flush(); 68 69 return ['skipped' => $skipped, 'imported' => $count]; 70 } 71 72 protected function createManufacturer($manufacturerName, $manufacturerData) 73 { 74 $manufacturer = new Manufacturer(); 75 $manufacturer->setName($manufacturerName); 76 77 if (array_key_exists('iclogos', $manufacturerData)) { 78 foreach ($manufacturerData['iclogos'] as $icLogo) { 79 $manufacturerIcLogo = new ManufacturerICLogo(); 80 81 $file = $this->kernel->locateResource(self::MANUFACTURER_PATH.$icLogo); 82 $this->uploadedFileService->replaceFromFilesystem($manufacturerIcLogo, new File($file)); 83 84 $manufacturer->addIcLogo($manufacturerIcLogo); 85 } 86 } 87 88 $this->entityManager->persist($manufacturer); 89 } 90 91 /** 92 * Checks if the specified manufacturer exists. 93 * 94 * @param string $name The manufacturer name 95 * 96 * @return true if the manufacturer exists, false otherwise 97 */ 98 protected function manufacturerExists($name) 99 { 100 $dql = "SELECT COUNT(m) FROM PartKeepr\ManufacturerBundle\Entity\Manufacturer m WHERE m.name = :name"; 101 $query = $this->entityManager->createQuery($dql); 102 $query->setParameter('name', $name); 103 104 if ($query->getSingleScalarResult() == 0) { 105 return false; 106 } else { 107 return true; 108 } 109 } 110 }