service.php 1.09 KB
<?php
class Flora_Api_Service
{
	/**
	 * @var Flora_Api
	 */
	protected $api;

	/**
	 * @param Flora_Api $api
	 */
	public function __construct(Flora_Api $api)
	{
		$this->api = $api;
	}

	/**
	 * @param $api
	 * @param array|object $data
	 * @param array|object $post
	 * @internal param bool|string $modelName
	 * @return Flora_Api_Response|Flora_Model[]|Flora_Model|mixed
	 */
	protected function call($api, $data = array(), $post = array())
	{
		$data = $data === false ? array() : $data;
		$result = $this->api->call($api, $data, $post)->getResult();

		$this->castResultClasses($result);
		if (is_array($result) || is_object($result)) {
			array_walk_recursive($result, array($this, "castResultClasses"));
		}

		return $result;
	}

	public function castResultClasses(&$item)
	{
		/** @noinspection PhpUndefinedFieldInspection */
		if ($item instanceof stdClass && isset($item->_className)) {
			/** @noinspection PhpUndefinedFieldInspection */
			$class = "Flora_" . $item->_className;
			$item = new $class($item, $this->api);

			array_walk_recursive($item, array($this, "castResultClasses"));
		}
	}
}