bundles/SaintElmos/ImportBundle/SaintElmosImportBundle.php line 12

Open in your IDE?
  1. <?php
  2. namespace SaintElmos\ImportBundle;
  3. use Pimcore\Db;
  4. use Pimcore\Extension\Bundle\AbstractPimcoreBundle;
  5. use Pimcore\Extension\Bundle\Installer\OutputWriterInterface;
  6. //use Pimcore\Extension\Bundle\Traits\PackageVersionTrait;
  7. use Pimcore\Tool;
  8. use SaintElmos\ImportBundle\Services\DataFixturesService;
  9. class SaintElmosImportBundle extends AbstractPimcoreBundle
  10. {
  11.     //use PackageVersionTrait;
  12.     /**
  13.      * Composer readable name
  14.      * @return string
  15.      */
  16.     protected function getComposerPackageName()
  17.     {
  18.         return 'saint-elmos/import-bundle';
  19.     }
  20.     
  21.     public function getJsPath(){
  22.         return array(__DIR__.'/Resources/js/backend');
  23.     }
  24.     public static $MESSAGE_FILE_NOT_FOUND 'Requested file could not be found';
  25.     public static $MESSAGE_IMPORTING 'Importing object';
  26.     public static $MESSAGE_OBJECT_EXISTS 'Object exists';
  27.     public static $MESSAGE_OBJECT_CREATED 'Object created';
  28.     public static $MESSAFE_OBJECT_NOT_CREATED 'Object could not be created';
  29.     public static $MESSAGE_SUCCESS 'OK';
  30.     public static $ERROR_FILE_NOT_EXISTS 'Missing or non existing configuration file given.';
  31.     public function getJsPaths()
  32.     {
  33.         return [
  34.             '/bundles/saintelmosimport/js/pimcore/startup.js'
  35.         ];
  36.     }
  37.     /**
  38.      * Returns Pimcore created files
  39.      * @param string $bundleName
  40.      * @return array
  41.      */
  42.     public static function getGeneratedFiles($bundleName){
  43.         global $kernel;
  44.         if(empty($kernel)){
  45.             $kernel = new \AppKernel(getenv('PIMCORE_ENVIRONMENT'));
  46.         }
  47.         $varDir $kernel->getRootDir().'/../var';
  48.         $basePath $kernel->getContainer()->get('kernel')->locateResource('@'.$bundleName);
  49.         $service $kernel->getContainer()->get(DataFixturesService::class);
  50.         $definitions $service->getDefinitions($basePath.'/DataFixtures/definitions');
  51.         $result = array();
  52.         foreach ($definitions as $definition) {
  53.             $result[] = $varDir '/classes/DataObject/' ucfirst($definition) . '.php';
  54.             $result[] = $varDir '/classes/DataObject/' ucfirst($definition) . '/Listing.php';
  55.             $result [$definition] = $varDir '/classes/definition_' $definition '.php';
  56.         }
  57.         return $result;
  58.     }
  59.     /**
  60.      * Installs objects provided by given bundle
  61.      * @param OutputWriterInterface $outputWriter
  62.      * @param string $bundleName
  63.      * @return array
  64.      */
  65.     public static function installBundleFixtures(string $bundleNameOutputWriterInterface $outputWriter){
  66.         global $kernel;
  67.         $result = array();
  68.         if(empty($kernel)){
  69.             $kernel = new \AppKernel(getenv('PIMCORE_ENVIRONMENT'));
  70.         }
  71.         $kernel $kernel->getContainer()->get('kernel');
  72.         $console $kernel->getRootDir().'/../bin/console';
  73.         $basePath $kernel->locateResource('@'.$bundleName);
  74.         $outputWriter->write('Importing definition files');
  75.         $result['definitions'] = shell_exec($console.' se:import:definitions '.$bundleName);
  76.         $outputWriter->write($result);
  77.         $treePath $basePath.'/DataFixtures/data_objects/tree.yaml';
  78.         $outputWriter->write('Creating objects');
  79.         $result['objects'] = shell_exec($console.' se:import:objects ' $treePath);
  80.         $outputWriter->write($result);
  81.         $outputWriter->write('Importing thumbnails');
  82.         $result['thumbnails'] = shell_exec($console.' se:import:thumbnails '.$bundleName);
  83.         $outputWriter->write('Importing translations');
  84.         $languages Tool::getValidLanguages();
  85.         foreach ($languages as $language) {
  86.             $command $console.' translation:update '.$language.' ' $bundleName.' --force';
  87.             $result['language-'.$language] = shell_exec($command);
  88.         }
  89.         $outputWriter->write($result);
  90.         return $result;
  91.     }
  92.     /**
  93.      * Removes objects created by given bundle
  94.      * @param string $bundleName
  95.      * @param OutputWriterInterface $outputWriter
  96.      * @return array
  97.      * @throws \Doctrine\DBAL\DBALException
  98.      */
  99.     public static function uninstallBundleFixtures(string $bundleNameOutputWriterInterface $outputWriter){
  100.         $result = array();
  101.         $definitions self::getGeneratedFiles($bundleName);
  102.         $clearTables = array('classes' => 'name'/*, 'objects' => 'o_className'*/);
  103.         foreach ($definitions as $definition => $filename){
  104.             $result[$definition] = @unlink($filename);
  105.             if(strpos($filename'definition') !== false){
  106.                 foreach ($clearTables as $table => $column) {
  107.                     $sql "DELETE FROM ".$table." WHERE `".$column."`=?";
  108.                     $query Db::get()->prepare($sql);
  109.                     $query->bindParam(1$definition\PDO::PARAM_STR);
  110.                     $query->execute();
  111.                 }
  112.             }
  113.         }
  114.         return $result;
  115.     }
  116.     /**
  117.      * Returns true if given bundle can be installed
  118.      * @param string $bundleName
  119.      * @return bool
  120.      * @throws \Doctrine\DBAL\DBALException
  121.      */
  122.     public static function canBundleBeInstalled(string $bundleName){
  123.         $result false;
  124.         $definitionsAll SaintElmosImportBundle::getGeneratedFiles($bundleName);
  125.         $definitions self::filterByDefinition($definitionsAll);
  126.         foreach ($definitions as $definition => $filename){
  127.             $sql "SELECT * FROM classes WHERE `name`=?";
  128.             $query Db::get()->prepare($sql);
  129.             $query->bindParam(1$definition\PDO::PARAM_STR);
  130.             $query->execute();
  131.             $rows $query->fetchAll();
  132.             if(count($rows) == 0){
  133.                 $result true;
  134.             }
  135.             break;
  136.         }
  137.         return $result;
  138.     }
  139.     /**
  140.      * Returns only definition files from given input array
  141.      * @param array $input
  142.      * @return array
  143.      */
  144.     private static function filterByDefinition($input){
  145.         $definitions array_filter($input, function($filename){
  146.             return strpos($filename'definition') !== false;
  147.         });
  148.         return $definitions;
  149.     }
  150. }