# depicter/1.3.3/app/src/Document/Mapper.php

Depicter — Popup &amp; Slider Builder, version 1.3.3. 71 lines.

- Page: https://pluginprobe.com/plugins/depicter/1.3.3/code/app/src/Document/Mapper.php
- Raw: https://pluginprobe.com/plugins/depicter/1.3.3/raw/app/src/Document/Mapper.php
- Modified: 2022-06-01T06:26:20+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/depicter/1.3.3/code/app/src/Document/Mapper.php#L10-L20`.

```php
<?php
namespace Depicter\Document;


use Depicter\Document\Models\Common\Styles\Base as Style;
use Depicter\Document\Models\Document;
use TypeRocket\Utility\Data;

/**
 * Maps JSON document data to document object
 *
 * @package Depicter\Document
 */
class Mapper
{
	/**
	 * @var Document
	 */
	protected $document;

	/**
	 * Hydrate the class with the provided $data.
	 *
	 * @param array|object $data
	 *
	 * @param int          $documentId
	 *
	 * @return mixed Mapped object is returned.
	 * @throws \JsonMapper_Exception
	 */
	public function hydrate( $data, $documentId = 0 )
	{
		// Maybe convert to object
		$dataObject = Data::cast( $data, 'object');

		// Hydrate the data to Document class
		$mapper = new \JsonMapper();
		$mapper->undefinedPropertyHandler = function( $class, $propName, $jsonValue ){
			if( $class instanceof Style ){
				$class->{$propName} = $jsonValue;
			}
		};
		$documentObject = isset( $dataObject->document ) ? $dataObject->document : $dataObject;
		$this->document = $mapper->map( $documentObject, new Document() );

		if( $documentId ){
			$this->document->setDocumentID( $documentId );
		}

		return $this;
	}

	/**
	 * Retrieves the mapped Document object
	 *
	 * @return Document
	 */
	public function get()
	{
		return $this->document;
	}

	/**
	 * @return string
	 */
	public function render()
	{
		return $this->get()->render();
	}
}

```
