Example #1
0
 public function testIfSqlIsnotNull()
 {
     /**
      * @var ModuleRepository
      */
     $objectRepository = new ModuleRepository();
     $objectRepository->setEntityManager($this->em);
     $objectRepository->setColumnMapper($this->columnMapper);
     $object = new EavColumns($this->em, $this->columnMapper, $this->module);
     $this->assertNotNull($object->getSql());
 }
 public function onUpdate(EavPersisterEvent $event)
 {
     $optionalData = $event->getOptionalData();
     $moduleId = $event->getModule()->getId();
     $tableName = '_flat_module_' . $moduleId;
     $container = $event->getContainer();
     $module = $event->getModule();
     if ($module->getGenerateFlat()) {
         $tableExists = $this->pdo->query('SELECT * FROM information_schema.tables WHERE table_name = "' . $tableName . '" LIMIT 1')->rowCount();
         if (!$tableExists) {
             $this->flatternTable->generate($module, true);
         }
         $context = $event->getContainer()->getContext();
         $containerId = $event->getContainer()->getId();
         $contextId = $event->getContainer()->getContext()->getId();
         $culture = $this->languageManager->getCulture();
         /** @var $moduleRepository EavModuleRepository * */
         $moduleRepository = $this->moduleRepository->getRepository($event->getModule())->setClass(new EavModuleRepository());
         $containerSQL = $moduleRepository->findByForFlatById($container, $module, $context)->getSQL();
         $containerRow = $moduleRepository->findByForFlatById($container, $module, $context)->getQuery()->getResult();
         $countColumnsSQL = $this->pdo->query('SHOW COLUMNS FROM ' . $tableName);
         $countColumnsSQL->execute();
         $columnsRes = $countColumnsSQL->fetchAll();
         $diffColumn = array();
         foreach ($columnsRes as $t) {
             $diffColumn[] = $t['Field'];
         }
         $columns = array_keys($containerRow[0]);
         if (count(array_diff($columns, $diffColumn)) > 0 || count(array_diff($diffColumn, $columns))) {
             $this->flatternTable->generate($module, true);
         }
         $sql = 'DELETE FROM ' . $tableName . '
         WHERE container_id = :container_id
         AND context_id = :context_id
         AND module_id = :module_id';
         $pdo = $this->pdo->prepare($sql);
         $pdo->bindParam('container_id', $containerId);
         $pdo->bindParam('context_id', $contextId);
         $pdo->bindParam('module_id', $moduleId);
         $pdo->execute();
         $sql = 'INSERT INTO ' . $tableName . ' ';
         $sql .= ' (' . implode(', ', $columns) . ' )';
         $sql .= $containerSQL;
         $pdo = $this->pdo->prepare($sql);
         $pdo->bindParam(':container_id', $containerId);
         $pdo->bindParam(':context_id', $contextId);
         $pdo->bindParam(':module_id', $moduleId);
         $pdo->execute();
     }
 }
 public function setUp()
 {
     parent::setUp();
     $this->createModuleData();
     $this->module = $this->em->getRepository('BigfishEavBundle:Module')->find(1);
     $this->columnMapper = $this->container->get('eav.column.mapper');
     /**
      * @var ModuleRepository
      */
     $objectRepository = new ModuleRepository();
     $objectRepository->setEntityManager($this->em);
     $objectRepository->setColumnMapper($this->columnMapper);
     $objectRepository->getRepository($this->module);
     $this->queryBuilder = new QueryBuilder($objectRepository);
 }
Example #4
0
 /**
  * Fill table with EAV values.
  *
  * @param $name
  *
  * @throws \Doctrine\DBAL\DBALException
  */
 public function fillTable($name)
 {
     $columnsToFill = array('container_id', 'context_id', 'module_id', 'resource_id', 'by_resource_id', 'sequence', 'deleted', 'display', 'expire_temporary_date', 'culture');
     foreach ($this->eavColumns->getColumns() as $column) {
         if ($this->getTypeToColumn($column['column'])) {
             $columnsToFill[] = $column['identifier'];
         }
     }
     $query = $this->moduleRepository->getRepository($this->module)->setClass(new EavModuleRepository());
     $moduleSQL = $query->findByModuleSql($this->module, $columnsToFill, true);
     $createSql = 'INSERT INTO `' . $name . '` (' . implode(', ', $columnsToFill) . ') ' . $moduleSQL;
     $pdo = $this->pdo->prepare($createSql);
     $pdo->bindValue(':module_id', $this->module->getId());
     $pdo->execute();
 }
 /**
  * @param $method
  * @param $arguments
  */
 public function __call($method, $arguments)
 {
     if (strpos($method, 'findBy') === false && strpos($method, 'findOne') === false) {
         throw new \InvalidArgumentException(sprintf('Method %s must follow code standards. Use findBy or findOne. For example: findOneAuthor', $method));
     }
     if ($this->_class) {
         $this->_class->getRepository($this->_module);
         $this->_class->setInvokeColumns($this->getInvokeColumns());
         $this->_class->setColumnMapper($this->getColumnMapper());
         $this->_class->setEntityManager($this->getEntityManager());
         $this->_class->setLanguageManager($this->getLanguageManager());
         $this->_class->setContextManager($this->getContextManager());
         $this->_class->setPivotResultChain($this->getPivotResultChain());
         if (method_exists($this->_class, $method)) {
             return call_user_func_array(array($this->_class, $method), $arguments);
         }
     }
     throw new \InvalidArgumentException(sprintf('Method %s does not exists', $method));
 }