partkeepr

fork of partkeepr
git clone https://git.e1e0.net/partkeepr.git
Log | Files | Refs | Submodules | README | LICENSE

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 }