/** * (non-PHPdoc) * @see Application\Model\Mapper.FilterMapperAbstract::_mapMessageValue() */ protected function _mapMessageValue(\DrSlump\Protobuf\Field $descriptor, \App_ListFilter_Interface $filter, \App_ListFilter $filterList) { if ($descriptor->getReference() == '\\Application\\Proto\\Report\\Target') { return $this->_mapTarget($descriptor, $filter, $filterList); } $result = parent::_mapMessageValue($descriptor, $filter, $filterList); if (!is_null($result)) { return $result; } return; }
protected function filterValue($value, Protobuf\Field $field) { switch ($field->getType()) { case Protobuf\Protobuf::TYPE_MESSAGE: // Tell apart encoding and decoding if ($value instanceof Protobuf\MessageInterface) { return $this->encodeMessage($value); } else { // Check if we are decoding in lazy mode if ($this->getOption('lazy')) { $lazy = new Protobuf\LazyValue(); $lazy->codec = $this; $lazy->descriptor = $field; $lazy->value = $value; return $lazy; } else { $nested = $field->getReference(); return $this->decodeMessage(new $nested(), $value); } } case Protobuf\Protobuf::TYPE_BOOL: if ($value === true || $value === false) { return $value; } return filter_var($value, FILTER_VALIDATE_BOOLEAN); case Protobuf\Protobuf::TYPE_STRING: case Protobuf\Protobuf::TYPE_BYTES: return (string) $value; case Protobuf\Protobuf::TYPE_FLOAT: case Protobuf\Protobuf::TYPE_DOUBLE: return filter_var($value, FILTER_VALIDATE_FLOAT, FILTER_NULL_ON_FAILURE); case Protobuf\Protobuf::TYPE_ENUM: $nested = $field->getReference(); $reference = new $nested(); if (!is_null($ref_value = $reference->__get($value))) { $value = $ref_value; } return filter_var($value, FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); // Assume the rest are ints // Assume the rest are ints default: return filter_var($value, FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); } }
protected function filterValue($value, Protobuf\Field $field) { switch ($field->getType()) { case Protobuf::TYPE_MESSAGE: // Tell apart encoding and decoding if ($value instanceof Protobuf\Message) { return $this->encodeMessage($value); } else { $nested = $field->getReference(); return $this->decodeMessage(new $nested(), $value); } case Protobuf::TYPE_BOOL: if ($value === true || $value === false) { return $value; } return filter_var($value, FILTER_VALIDATE_BOOLEAN); case Protobuf::TYPE_STRING: case Protobuf::TYPE_BYTES: return (string) $value; case Protobuf::TYPE_FLOAT: case Protobuf::TYPE_DOUBLE: return filter_var($value, FILTER_VALIDATE_FLOAT, FILTER_NULL_ON_FAILURE); // Assume the rest are ints // Assume the rest are ints default: return filter_var($value, FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); } }
protected function _mapReverse(\DrSlump\Protobuf\Field $descriptor, \App_ListFilter_Interface $filter, \App_ListFilter $filterList) { switch ($descriptor->getReference()) { case '\\Application\\Proto\\Inventory\\ExpenseCriteria': case '\\Application\\Proto\\Inventory\\ConsumptionCriteria': switch (true) { case $filter instanceof \App_ListFilter_GreaterThanFilter: return false; default: return true; } default: return parent::_mapReverse($descriptor, $filter, $filterList); } }
/** * Map dispatcher * @param \DrSlump\Protobuf\Field $descriptor * @param \App_ListFilter_Interface $filter * @return mixed */ protected function _mapData(\DrSlump\Protobuf\Field $descriptor, \App_ListFilter_Interface $filter, \App_ListFilter $filterList) { switch ($descriptor->getType()) { //It's a message case 11: return $this->_mapMessageValue($descriptor, $filter, $filterList); //It's a enum //It's a enum case 14: return $this->_mapEnumValue($descriptor, $filter, $filterList); //It's a simple value //It's a simple value default: return $this->_mapSimpleValue($descriptor, $filter, $filterList); } }
protected function filterValue($value, Protobuf\Field $field) { if ($value instanceof Protobuf\Message) { if ($this->isKeyValueMessage($value)) { $v = $value->getValue(); return [$value->getKey() => $v instanceof Protobuf\Message ? $this->encodeMessage($v) : $v]; } if ($value instanceof Struct) { $vals = []; foreach ($value->getFields() as $field) { $val = $this->filterValue($field->getValue(), $field->descriptor()->getFieldByName('value')); $vals[$field->getKey()] = current($val); } return $vals; } if ($value instanceof ListValue) { $vals = []; foreach ($value->getValuesList() as $val) { $vals[] = current($this->encodeMessage($val)); } return $vals; } } return parent::filterValue($value, $field); }