public function registerEvents(Events $events)
 {
     $events->addCallbackListener($events::HYDRATE_AFTER, function (EventArguments $args) {
         /** @var BadgeUserBridge $entity */
         $entity = $args->entity;
         $entity->injectTranslator($this->translator);
     });
 }
 public function registerEvents(Events $events)
 {
     $events->addCallbackListener($events::PERSIST_AFTER, function (EventArguments $args) {
         /** @var IIndexable|Entity $e */
         $e = $args->entity;
         $data = $e->getIndexData();
         if ($data === FALSE) {
             try {
                 $this->elastic->removeFromIndex($this->getShortEntityName(), (int) $e->id);
             } catch (Missing404Exception $e) {
                 // entity was yet not in index
             }
         } else {
             $this->elastic->addToIndex($this->getShortEntityName(), (int) $e->id, $data);
         }
     });
 }
Beispiel #3
0
 /**
  * @param IEntity
  * @param scalar|NULL id
  * @param string update|insert
  * @return array
  */
 protected function toArray(IEntity $entity, $id, $operation)
 {
     $values = $entity->toArray();
     if ($id !== NULL) {
         $values['id'] = $id;
     }
     $params = array('id' => isset($values['id'])) + (array) $this->params;
     $params += array_fill_keys(array_keys($values), true);
     if ($this->whichParams !== NULL) {
         $params = array('id' => $params['id']) + array_fill_keys($this->whichParams, true);
     }
     if ($this->whichParamsNot !== NULL) {
         $tmp = array_fill_keys($this->whichParamsNot, false);
         unset($tmp['id']);
         $params = $tmp + $params;
     }
     $arguments = array('params' => $params, 'values' => $values, 'operation' => $operation);
     $this->events->fireEvent(Events::SERIALIZE_BEFORE, $entity, $arguments);
     $params = $arguments['params'];
     $values = $arguments['values'];
     $result = array();
     foreach ($params as $key => $do) {
         if (array_key_exists($key, $values)) {
             $value = $values[$key];
         } else {
             // pokusi se precist, muze existovat getter, jinak vyhodi exception
             $value = $entity->{$key};
         }
         if ($do === false or $operation === 'update' and $entity->hasParam($key) and !$entity->isChanged($key)) {
             continue;
         }
         if ($do !== true) {
             $value = Callback::create($do)->invoke($value, $entity);
         }
         $result[$key] = $this->scalarizeValue($value, $key, $entity);
         if ($value instanceof IRelationship and $result[$key] === NULL) {
             unset($result[$key]);
         }
     }
     $arguments = array('values' => $result, 'operation' => $operation);
     $this->events->fireEvent(Events::SERIALIZE_AFTER, $entity, $arguments);
     $result = $arguments['values'];
     $result = $this->conventional->formatEntityToStorage($result);
     $primaryKey = $this->conventional->getPrimaryKey();
     if ($primaryKey !== $this->primaryKey and array_key_exists($primaryKey, $result)) {
         $id = $result[$primaryKey];
         unset($result[$primaryKey]);
         $result = array($this->primaryKey => $id) + $result;
     }
     $arguments = array('values' => $result, 'operation' => $operation);
     $this->events->fireEvent(Events::SERIALIZE_CONVENTIONAL, $entity, $arguments);
     $result = $arguments['values'];
     return $result;
 }
 public function registerEvents(Events $events)
 {
     $keys = $this->getJsonFields();
     $events->addCallbackListener($events::HYDRATE_BEFORE, function (EventArguments $args) use($keys) {
         foreach ($keys as $key) {
             if (isset($args->data[$key])) {
                 $args->data[$key] = Json::decode($args->data[$key], Json::FORCE_ARRAY);
             }
         }
     });
     $events->addCallbackListener($events::SERIALIZE_BEFORE, function (EventArguments $args) use($keys) {
         foreach ($keys as $key) {
             if (isset($args->values[$key])) {
                 $args->values[$key] = Json::encode($args->values[$key]);
             }
         }
         foreach ($args->values as &$value) {
             if (is_string($value) && $value === '') {
                 $value = NULL;
             }
         }
     });
 }
Beispiel #5
0
 /**
  * Smaze entitu z uloziste {@see IMapper::remove()} a odpoji ji z repository.
  * Z entitou lze pak jeste pracovat do ukonceni scriptu, ale uz nema id a neni zapojena na repository.
  *
  * Vola udalosti:
  * @see Events::REMOVE_BEFORE
  * @see Entity::onBeforeRemove()
  * @see Events::REMOVE_AFTER
  * @see Entity::onAfterRemove()
  *
  * @param scalar|IEntity
  * @return bool
  */
 public final function remove($entity)
 {
     $entity = $entity instanceof IEntity ? $entity : $this->getById($entity);
     $this->identityMap->check($entity);
     if (isset($entity->id) or $entity->getRepository(false)) {
         $this->events->fireEvent(Events::REMOVE_BEFORE, $entity);
         if (isset($entity->id)) {
             if (!$this->getMapper()->remove($entity)) {
                 throw new BadReturnException(array($this->getMapper(), 'remove', 'TRUE', NULL, '; something wrong with mapper'));
             }
             $this->identityMap->remove($entity->id);
         }
         $this->identityMap->detach($entity);
         $this->events->fireEvent(Events::REMOVE_AFTER, $entity);
     }
     return true;
 }