/**
  * @param Entity $entity
  * @param Hydrater $hydrater
  * @param EntityAnalyzer $analyzer
  */
 public function flushEntity($entity, Hydrater $hydrater, EntityAnalyzer $analyzer)
 {
     $originData = $entity->_getOriginData();
     $originName = array();
     if (is_null($originData)) {
         $originData = array();
         foreach ($analyzer->listColumns() as $name => $data) {
             if ($data['type'] === 'array') {
                 $originData[strtolower($name)] = array();
             } else {
                 $originData[strtolower($name)] = NULL;
             }
         }
     }
     foreach ($analyzer->listColumns() as $name => $data) {
         $originName[strtolower($name)] = $name;
     }
     $originName['objectclass'] = 'objectclass';
     $currentData = $hydrater->getData($entity);
     foreach ($currentData as $column => $value) {
         if (array_key_exists($originName[strtolower($column)], $analyzer->listColumns()) && $analyzer->listColumns()[$originName[strtolower($column)]]['type'] === 'array' && is_null($value)) {
             $currentData[$column] = array();
         }
         // Convert array of entity to array of DN
         if ($analyzer->isEntityRelation($originName[strtolower($column)])) {
             $listDn = array();
             foreach ($value as $e) {
                 if ($e instanceof Entity) {
                     $listDn[] = $e->_getDn();
                 }
             }
             $currentData[$column] = $listDn;
         }
     }
     $diff = self::dataDiff($currentData, $originData);
     $dn = $entity->_getDn();
     if (is_null($dn)) {
         if ($this->param[EntityFlusher::CREATE]) {
             $this->create($entity, $currentData, $diff, $analyzer);
         } else {
             throw new InflushableException('Unable to create entity, Param::Create is false');
         }
     } else {
         if (array_key_exists($analyzer->getIndex(), $diff)) {
             // If key index is diff => rename
             if ($this->param[EntityFlusher::RENAME]) {
                 $this->rename($entity, $currentData, $diff, $analyzer);
             } else {
                 throw new InflushableException('Unable to rename entity, Param::Rename is false');
             }
         }
         if (count($diff) > 0) {
             $this->em->getClient()->update($entity->_getDn(), $diff);
         }
     }
 }
Ejemplo n.º 2
0
 public function defineObjectClass(Entity $entity)
 {
     $classAnnotation = $this->analyzer->getClassAnnotation();
     foreach ($classAnnotation['objectclass'] as $objectClass) {
         $entity->addObjectClass($objectClass);
     }
 }