Location: PHPKode > projects > Croogo > croogo-croogo-0195ebf/Model/Behavior/MetaBehavior.php
<?php
/**
 * Meta Behavior
 *
 * PHP version 5
 *
 * @category Behavior
 * @package  Croogo
 * @version  1.0
 * @author   Fahad Ibnay Heylaal <hide@address.com>
 * @license  http://www.opensource.org/licenses/mit-license.php The MIT License
 * @link     http://www.croogo.org
 */
class MetaBehavior extends ModelBehavior {

/**
 * Setup
 *
 * @param Model $model
 * @param array $config
 * @return void
 */
	public function setup(Model $model, $config = array()) {
		if (is_string($config)) {
			$config = array($config);
		}

		$this->settings[$model->alias] = $config;
	}

/**
 * afterFind callback
 *
 * @param Model $model
 * @param array $created
 * @param boolean $primary
 * @return array
 */
	public function afterFind(Model $model, $results, $primary) {
		if ($primary && isset($results[0][$model->alias])) {
			foreach ($results as $i => $result) {
				$customFields = array();
				if (isset($result['Meta']) && count($result['Meta']) > 0) {
					$customFields = Set::combine($result, 'Meta.{n}.key', 'Meta.{n}.value');
				}
				$results[$i]['CustomFields'] = $customFields;
			}
		} elseif (isset($results[$model->alias])) {
			$customFields = array();
			if (isset($results['Meta']) && count($results['Meta']) > 0) {
				$customFields = Set::combine($results, 'Meta.{n}.key', 'Meta.{n}.value');
			}
			$results['CustomFields'] = $customFields;
		}

		return $results;
	}

/**
 * Prepare data
 *
 * @param Model $model
 * @param array $data
 * @return array
 */
	public function prepareData(Model $model, $data) {
		return $this->_prepareMeta($data);
	}

/**
 * Private method for MetaBehavior::prepareData()
 *
 * @param Model$model
 * @param array $data
 * @return array
 */
	protected function _prepareMeta($data) {
		if (isset($data['Meta']) &&
			is_array($data['Meta']) &&
			count($data['Meta']) > 0 &&
			!Set::numeric(array_keys($data['Meta']))) {
			$meta = $data['Meta'];
			$data['Meta'] = array();
			$i = 0;
			foreach ($meta as $metaUuid => $metaArray) {
				$data['Meta'][$i] = $metaArray;
				$i++;
			}
		}

		return $data;
	}

/**
 * Save with meta
 *
 * @param Model $model
 * @param array $data
 * @param array $options
 * @return void
 */
	public function saveWithMeta(Model $model, $data, $options = array()) {
		$data = $this->_prepareMeta($data);
		return $model->saveAll($data, $options);
	}

}
Return current item: Croogo