/**
  * (non-PHPdoc)
  * @see ModelBehavior::beforeSave()
  */
 public function beforeSave(Model $Model)
 {
     // проверяем необходимость сворачивания полей в gridfs
     foreach ($this->_settings['fields'] as $field) {
         $data = $Model->data[$Model->alias];
         $paths = explode('.', $field);
         foreach ($paths as $path) {
             if (!empty($data[$path])) {
                 $data = $data[$path];
             } else {
                 $data = null;
             }
         }
         $bytes = serialize($data);
         if (!empty($data) && mb_strlen($bytes, '8bit') > $this->_settings['size']) {
             // сохраняем содержимое поля в gridfs, а в значение поля записываем id в grid-е
             $value = $this->_Grid->storeBytes($bytes);
             if (count($paths) == 1) {
                 $Model->data[$Model->alias][$paths[0]] = $value;
             } elseif (count($paths) == 2) {
                 $Model->data[$Model->alias][$paths[0]][$paths[1]] = $value;
             } elseif (count($paths) == 3) {
                 $Model->data[$Model->alias][$paths[0]][$paths[1]][$paths[2]] = $value;
             } elseif (count($paths) == 4) {
                 $Model->data[$Model->alias][$paths[0]][$paths[1]][$paths[2]][$paths[3]] = $value;
             }
         }
     }
     return parent::beforeSave($Model);
 }
Beispiel #2
0
 /**
  * Run before a model is saved, used to set up slug for model.
  *
  * @param object $Model Model about to be saved.
  * @return boolean true if save should proceed, false otherwise
  * @access public
  */
 function beforeSave(&$Model)
 {
     $return = parent::beforeSave($Model);
     // Make label fields an array
     if (!is_array($this->__settings[$Model->alias]['label'])) {
         $this->__settings[$Model->alias]['label'] = array($this->__settings[$Model->alias]['label']);
     }
     // Make sure all label fields are available
     foreach ($this->__settings[$Model->alias]['label'] as $field) {
         if (!$Model->hasField($field)) {
             return $return;
         }
     }
     // See if we should be generating a slug
     if ($Model->hasField($this->__settings[$Model->alias]['slug']) && ($this->__settings[$Model->alias]['overwrite'] || empty($Model->id))) {
         // Build label out of data in label fields, if available, or using a default slug otherwise
         $label = '';
         foreach ($this->__settings[$Model->alias]['label'] as $field) {
             if (!empty($Model->data[$Model->alias][$field])) {
                 $label .= ife(!empty($label), ' ', '') . $Model->data[$Model->alias][$field];
             }
         }
         // Keep on going only if we've got something to slug
         if (!empty($label)) {
             // Get the slug
             $slug = $this->__slug($label, $this->__settings[$Model->alias]);
             // Look for slugs that start with the same slug we've just generated
             $conditions = array($Model->alias . '.' . $this->__settings[$Model->alias]['slug'] => 'LIKE ' . $slug . '%');
             if (!empty($Model->id)) {
                 $conditions[$Model->alias . '.' . $Model->primaryKey] = '!= ' . $Model->id;
             }
             $result = $Model->find('all', array('conditions' => $conditions, 'fields' => array($Model->primaryKey, $this->__settings[$Model->alias]['slug']), 'recursive' => -1));
             $sameUrls = null;
             if (!empty($result)) {
                 $sameUrls = Set::extract($result, '{n}.' . $Model->alias . '.' . $this->__settings[$Model->alias]['slug']);
             }
             // If we have collissions
             if (!empty($sameUrls)) {
                 $begginingSlug = $slug;
                 $index = 1;
                 // Attach an ending incremental number until we find a free slug
                 while ($index > 0) {
                     if (!in_array($begginingSlug . $this->__settings[$Model->alias]['separator'] . $index, $sameUrls)) {
                         $slug = $begginingSlug . $this->__settings[$Model->alias]['separator'] . $index;
                         $index = -1;
                     }
                     $index++;
                 }
             }
             // Now set the slug as part of the model data to be saved, making sure that
             // we are on the white list of fields to be saved
             if (!empty($Model->whitelist) && !in_array($this->__settings[$Model->alias]['slug'], $Model->whitelist)) {
                 $Model->whitelist[] = $this->__settings[$Model->alias]['slug'];
             }
             $Model->data[$Model->alias][$this->__settings[$Model->alias]['slug']] = $slug;
         }
     }
     return $return;
 }
Beispiel #3
0
 /**
  * Prepare the meta data for saving
  */
 public function beforeSave(Model $Model, $options = array())
 {
     if (isset($Model->data[$Model->alias]['MetaData'])) {
         $Model->data['MetaData'] = $Model->data[$Model->alias]['MetaData'];
         unset($Model->data[$Model->alias]['MetaData']);
     }
     return parent::beforeSave($Model, $options);
 }
 public function beforeSave(Model $Model)
 {
     parent::beforeSave($Model);
     if ($this->settings[$Model->alias]['before'] == 'save') {
         $this->process($Model);
     }
     return true;
 }
Beispiel #5
0
 public function beforeSave(Model $Model, $options = array())
 {
     parent::beforeSave($Model, $options);
     if ($this->settings[$Model->alias]['before'] === 'save') {
         return $this->geocode($Model);
     }
     return true;
 }
 public function beforeSave(Model $Model)
 {
     $return = parent::beforeSave($Model);
     if ($this->settings[$Model->alias]['before'] == 'save') {
         return $this->confirm($Model, $return);
     }
     return $return;
 }
 /**
  * beforeSave callback
  *
  * @param Model $model The current model being used
  * @param array $options Callback options
  *
  * @return mixed
  */
 public function beforeSave(Model $model, $options = array())
 {
     $fields = (array) $this->__settings[$model->alias]['fields'];
     $scope = (array) $this->__settings[$model->alias]['scope'];
     $conditions = !empty($this->__settings[$model->alias]['conditions']) ? (array) $this->__settings[$model->alias]['conditions'] : array();
     $slugfield = $this->__settings[$model->alias]['slugfield'];
     $hasFields = true;
     foreach ($fields as $field) {
         if (!$model->hasField($field)) {
             $hasFields = false;
         }
         if (!isset($model->data[$model->alias][$field])) {
             $hasFields = false;
         }
     }
     if ($hasFields && $model->hasField($slugfield) && ($this->__settings[$model->alias]['overwrite'] || empty($model->id))) {
         $toSlug = array();
         foreach ($fields as $field) {
             $toSlug[] = $model->data[$model->alias][$field];
         }
         $toSlug = join(' ', $toSlug);
         $slug = Inflector::slug($toSlug, $this->__settings[$model->alias]['separator']);
         if ($this->__settings[$model->alias]['lower']) {
             $slug = strtolower($slug);
         }
         if (strlen($slug) > $this->__settings[$model->alias]['length']) {
             $slug = substr($slug, 0, $this->__settings[$model->alias]['length']);
         }
         $conditions[$model->alias . '.' . $slugfield . ' LIKE'] = $slug . '%';
         if (!empty($model->id)) {
             $conditions[$model->alias . '.' . $model->primaryKey . ' !='] = $model->id;
         }
         if (!empty($scope)) {
             foreach ($scope as $s) {
                 if (isset($model->data[$model->alias][$s])) {
                     $conditions[$model->alias . '.' . $s] = $model->data[$model->alias][$s];
                 }
             }
         }
         $sameUrls = $model->find('all', array('recursive' => -1, 'conditions' => $conditions));
         $sameUrls = !empty($sameUrls) ? Hash::extract($sameUrls, '{n}.' . $model->alias . '.' . $slugfield) : array();
         if (!empty($sameUrls)) {
             if (in_array($slug, $sameUrls)) {
                 $begginingSlug = $slug;
                 $index = 1;
                 while ($index > 0) {
                     if (!in_array($begginingSlug . $this->__settings[$model->alias]['separator'] . $index, $sameUrls)) {
                         $slug = $begginingSlug . $this->__settings[$model->alias]['separator'] . $index;
                         $index = -1;
                     }
                     $index++;
                 }
             }
         }
         $model->data[$model->alias][$slugfield] = $slug;
     }
     return parent::beforeSave($model);
 }
Beispiel #8
0
 /**
  * beforeSave is called before a model is saved. Returning false from a beforeSave callback
  * will abort the save operation.
  *
  * @param Model $model Model using this behavior
  * @param array $options Options passed from Model::save().
  *
  * @return mixed|void
  */
 public function beforeSave(\Model $model, $options = array())
 {
     parent::beforeSave($model);
     $request = new CakeRequest();
     $data = ['blog' => urlencode(Configure::read('General.site_url')), 'user_ip' => urlencode($model->data[$model->alias]['author_ip']), 'user_agent' => urlencode($model->data[$model->alias]['agent']), 'referrer' => urlencode($request->referer()), 'permalink' => urlencode($request->referer()), 'comment_type' => urlencode('comment'), 'comment_author' => urlencode($model->data[$model->alias]['author']), 'comment_author_email' => urlencode($model->data[$model->alias]['author_email']), 'comment_author_url' => urlencode($model->data[$model->alias]['author_url']), 'comment_content' => urlencode($model->data[$model->alias]['content'])];
     if (Akismet::isSpam($data, Configure::read('Akismet.api_key'))) {
         $model->data[$model->alias]['status'] = 'spam';
     }
 }
 public function beforeSave(Model $Model, $options = array())
 {
     $return = parent::beforeSave($Model, $options);
     if ($this->settings[$Model->alias]['before'] === 'save') {
         return $this->confirm($Model, $return);
     }
     //pr($Model->data);
     return $return;
 }
 function beforeSave(Model $Model)
 {
     $data =& $Model->data[$Model->alias];
     if (!empty($data['password'])) {
         $data['salt'] = $this->generateSaltString();
         $data['password'] = $this->generateSaltedPassword($data['password'], $data['salt']);
     } else {
         unset($data['password']);
     }
     return parent::beforeSave($Model);
 }
 public function beforeSave(Model $model, $options = array())
 {
     $alias = $model->alias;
     $fields = $this->settings[$alias];
     foreach ($fields as $date => $year) {
         if (isset($model->data[$alias][$date]) && !empty($model->data[$alias][$date])) {
             $model->data[$alias][$year] = date('Y', strtotime($model->data[$alias][$date]));
         }
     }
     return parent::beforeSave($model, $options);
 }
 public function beforeSave(Model $model, $options = array())
 {
     $format = 'Y-m-d';
     $fields = $this->settings[$model->alias];
     foreach ($fields as $field) {
         if (isset($model->data[$model->alias][$field]) && !empty($model->data[$model->alias][$field])) {
             $value = $model->data[$model->alias][$field];
             $model->data[$model->alias][$field] = date($format, strtotime($value));
         }
     }
     return parent::beforeSave($model, $options);
 }
Beispiel #13
0
 /**
  * Before save callback
  *
  * @param object $model Model using this behavior
  * @return boolean True if the operation should continue, false if it should abort
  */
 public function beforeSave($model)
 {
     $return = parent::beforeSave($model);
     if ($return === false) {
         return $return;
     }
     foreach ($this->settings[$model->alias] as $field) {
         if (isset($model->data[$model->alias][$field])) {
             $model->data[$model->alias][$field] = $this->compress($model, $model->data[$model->alias][$field]);
         }
     }
     return $return;
 }
Beispiel #14
0
	/**
	 * Trim através do callback beforeSave
	 *
	 * @see ModelBehavior::beforeSave()
	 */
	public function beforeSave(Model $model, $options = array())
	{
		parent::beforeSave($model, $options);

		$this->_Model = $model;

		if (isset($this->_disabledFor[$model->alias])) {
			return true;
		}

		$this->_autoTrim();

		return true;
	}
 /**
  * Run before a model is saved, used to set up slug for model.
  *
  * @param Model $Model Model about to be saved.
  * @return boolean true if save should proceed, false otherwise
  */
 public function beforeSave(Model $Model)
 {
     $return = parent::beforeSave($Model);
     if (!is_array($this->__settings[$Model->alias]['label'])) {
         $this->__settings[$Model->alias]['label'] = array($this->__settings[$Model->alias]['label']);
     }
     foreach ($this->__settings[$Model->alias]['label'] as $field) {
         if (!$Model->hasField($field)) {
             return $return;
         }
     }
     if ($Model->hasField($this->__settings[$Model->alias]['slug']) && ($this->__settings[$Model->alias]['overwrite'] || empty($Model->id))) {
         $label = '';
         foreach ($this->__settings[$Model->alias]['label'] as $field) {
             if (!empty($Model->data[$Model->alias][$field])) {
                 $label .= (!empty($label) ? ' ' : '') . $Model->data[$Model->alias][$field];
             }
         }
         if (!empty($label)) {
             $slug = $this->__slug($label, $this->__settings[$Model->alias]);
             $conditions = array($Model->alias . '.' . $this->__settings[$Model->alias]['slug'] . ' LIKE' => $slug . '%');
             // Fix 2
             if (!empty($Model->id)) {
                 $conditions['not'] = array($Model->alias . '.' . $Model->primaryKey => $Model->id);
             }
             $result = $Model->find('all', array('conditions' => $conditions, 'fields' => array($Model->primaryKey, $this->__settings[$Model->alias]['slug']), 'recursive' => -1));
             $sameUrls = null;
             if (!empty($result)) {
                 $sameUrls = Hash::extract($result, '{n}.' . $Model->alias . '.' . $this->__settings[$Model->alias]['slug']);
             }
             if (!empty($sameUrls)) {
                 $begginingSlug = $slug;
                 $index = 1;
                 while ($index > 0) {
                     if (!in_array($begginingSlug . $this->__settings[$Model->alias]['separator'] . $index, $sameUrls)) {
                         $slug = $begginingSlug . $this->__settings[$Model->alias]['separator'] . $index;
                         $index = -1;
                     }
                     $index++;
                 }
             }
             if (!empty($Model->whitelist) && !in_array($this->__settings[$Model->alias]['slug'], $Model->whitelist)) {
                 $Model->whitelist[] = $this->__settings[$Model->alias]['slug'];
             }
             $Model->data[$Model->alias][$this->__settings[$Model->alias]['slug']] = $slug;
         }
     }
     return $return;
 }
 public function beforeSave($Model)
 {
     $return = parent::beforeSave($Model);
     $fields = $this->__settings[$Model->alias]['fields'];
     if (empty($fields)) {
         return $return;
     }
     foreach ($fields as $before => $after) {
         if (isset($Model->data[$Model->alias][$before])) {
             $val = $this->replaceSpecialChars($Model, $Model->data[$Model->alias][$before]);
             $Model->data[$Model->alias][$after] = $val;
         }
     }
     return $return;
 }
 /**
 * public $actsAs = array('StringManipulation' => array(
        'fields' => array(
            'operation' => array([fields])
            )
        )
  );
 * 
 * public $actsAs = array('StringManipulation' => array(
        'fields' => array(
            'lowercase' => array('ingredient', 'type')
            )
        )
  );
 * 
 * Applies the operation to all the fields
 * 
 * @param type $model 
 */
 public function beforeSave(&$model)
 {
     parent::beforeSave($model);
     foreach ($this->config['fields'] as $op => $fields) {
         foreach ($fields as $field) {
             if (empty($this->model->data[$this->model->name][$field])) {
                 break;
             }
             switch ($op) {
                 case 'lowercase':
                     $this->model->data[$this->model->name][$field] = strtolower($this->model->data[$this->model->name][$field]);
                     break;
             }
         }
     }
 }
 /**
  * Before save callback
  *
  * @param object $model Model using this behavior
  * @return boolean True if the operation should continue, false if it should abort
  * @access public
  */
 public function beforeSave(&$model)
 {
     $return = parent::beforeSave($model);
     // What is the field that should hold this?
     if (in_array($this->settings[$model->alias]['mode'], array('update', 'auto')) and isset($model->data[$model->alias][$model->primaryKey]) and !empty($model->data[$model->alias][$model->primaryKey])) {
         $field = $this->settings[$model->alias]['field'];
         if ($model->hasField($field)) {
             //Build the URL...
             $controllerName = Inflector::variable(Inflector::tableize($model->alias));
             $params = $this->_getParams(&$model, $this->settings[$model->alias]['fields']);
             $url = Router::url(array('controller' => $controllerName, 'action' => $this->settings[$model->alias]['action'], $params));
             $model->data[$model->alias][$field] = $this->trimURL($url, $this->settings[$model->alias]['api']);
         }
     }
     return $return;
 }
 public function beforeSave(Model $model, $options = array())
 {
     $fields = $this->settings[$model->alias];
     $alias = $model->alias;
     $fieldName = $fields['content'];
     if (!empty($model->data[$alias][$fieldName])) {
         $file = $model->data[$alias][$fieldName];
         if ($file['error'] == 0) {
             if (isset($fields['name'])) {
                 $model->data[$alias][$fields['name']] = $file['name'];
             }
             $model->data[$alias][$fieldName] = file_get_contents($file['tmp_name']);
         }
     }
     return parent::beforeSave($model, $options);
 }
Beispiel #20
0
 /**
  * Run before a model is saved, used to set up slug for model.
  *
  * @param object $model Model about to be saved.
  * @return boolean true if save should proceed, false otherwise
  */
 public function beforeSave($model)
 {
     $return = parent::beforeSave($model);
     $settings = $this->settings[$model->alias];
     $fields = (array) $settings['label'];
     if ($settings['real']) {
         foreach ($fields as $field) {
             if (!$model->hasField($field)) {
                 return $return;
             }
         }
     }
     if ((!$settings['real'] || $model->hasField($settings['slug'])) && ($settings['overwrite'] || empty($model->id))) {
         $label = '';
         foreach ($fields as $field) {
             if (!empty($model->data[$model->alias][$field])) {
                 $label .= (!empty($label) ? ' ' : '') . $model->data[$model->alias][$field];
             }
         }
         if (!empty($label)) {
             $slug = $this->_slug($label, $settings);
             $conditions = array($model->alias . '.' . $settings['slug'] . ' LIKE' => $slug . '%');
             if (!empty($model->id)) {
                 $conditions['not'] = array($model->alias . '.' . $model->primaryKey => $model->id);
             }
             $result = $model->find('all', array('conditions' => $conditions, 'fields' => array($model->primaryKey, $settings['slug']), 'recursive' => -1));
             $sameUrls = null;
             if (!empty($result)) {
                 $sameUrls = Set::extract($result, '/' . $model->alias . '/' . $settings['slug']);
             }
             if (!empty($sameUrls)) {
                 $begginingSlug = $slug;
                 $index = 1;
                 do {
                     $currentSlug = $begginingSlug . $settings['separator'] . $index++;
                     if (!in_array($currentSlug, $sameUrls)) {
                         $slug = $currentSlug;
                         break;
                     }
                 } while (true);
             }
             $model->data[$model->alias][$settings['slug']] = $slug;
             $this->_addToWhitelist($model, $settings['slug']);
         }
     }
     return $return;
 }
 /**
  * Before save convert data to sqlformat
  *
  * @return True
  **/
 public function beforeSave(Model $model, $options = array())
 {
     parent::beforeSave($model, $options);
     $columnTypes = $model->getColumnTypes();
     $fields = array_filter($columnTypes, array($this, 'valueIsDate'));
     foreach ($fields as $field => $value) {
         if (!array_key_exists($field, $model->data[$model->alias])) {
             continue;
         }
         $date = $this->dateObject($model->data[$model->alias][$field]);
         if (!$date) {
             return false;
         }
         $model->data[$model->alias][$field] = $this->ObjectToSQL($date);
     }
     return true;
 }
Beispiel #22
0
 /**
  * Before save callback
  *
  * @param object $model Model using this behavior
  * @return bool True if the operation should continue, false if it should abort
  */
 public function beforeSave($model)
 {
     $result = parent::beforeSave($model);
     if (empty($this->settings[$model->alias]['save']) || $result === false || $model->exists()) {
         return $result;
     }
     $defaults = array();
     foreach ($model->schema() as $field => $properties) {
         $defaults[$field] = $properties['default'];
     }
     $data = array();
     foreach ($this->settings[$model->alias]['save'] as $field => $fieldValue) {
         if (!isset($model->data[$model->alias][$field]) || $model->data[$model->alias][$field] == $defaults[$field]) {
             $data[$field] = $fieldValue;
         }
     }
     if (!empty($data)) {
         $this->_addToWhitelist($model, array_keys($data));
         $model->data[$model->alias] = array_merge($model->data[$model->alias], $data);
     }
     return $result;
 }
Beispiel #23
0
 /**
  * Before save callback
  *
  * @param object $model Model using this behavior
  * @return boolean True if the operation should continue, false if it should abort
  * @access public
  */
 public function beforeSave(\Model $model, $options = array())
 {
     $return = parent::beforeSave($model, $options);
     if (!$return) {
         return;
     }
     $this->getFields($model);
     foreach ($this->_fields[$model->alias] as $fieldName) {
         if (!isset($model->data[$model->alias][$fieldName]) or empty($model->data[$model->alias][$fieldName])) {
             continue;
         }
         if ($this->settings[$model->alias]['overwrite']) {
             $model->data[$model->alias][$fieldName] = $this->clean($model, $model->data[$model->alias][$fieldName]);
         } else {
             $affix = $this->settings[$model->alias]['affix'];
             $affixedFieldName = "{$fieldName}{$affix}";
             if ($this->settings[$model->alias]['affix_position'] == 'prefix') {
                 $affixedFieldName = "{$affix}{$fieldName}";
             }
             $model->data[$model->alias][$affixedFieldName] = $this->clean($model, $model->data[$model->alias][$fieldName]);
         }
     }
     return parent::beforeSave($model, $options);
 }
 /**
  * before saving loop through any fields that need to be encrypted and
  * encrypt them
  *
  * @param object $Model the model being encrypted
  * @return bool true / false see parent::beforeSave()
  */
 public function beforeSave($Model)
 {
     if (is_array(current($Model->data[$Model->alias]))) {
         // saveall
         foreach ($Model->data[$Model->alias] as $k => $row) {
             foreach ($this->settings[$Model->alias]['fields'] as $field) {
                 if (isset($Model->data[$Model->alias][$k][$field])) {
                     $Model->data[$Model->alias][$k][$field . '_search'] = $this->searchFieldData($Model->alias, $Model->data[$Model->alias][$k][$field]);
                     $Model->data[$Model->alias][$k][$field] = $this->encrypt($Model->data[$Model->alias][$k][$field]);
                 }
             }
         }
     } else {
         // normal save
         foreach ($this->settings[$Model->alias]['fields'] as $field) {
             if (isset($Model->data[$Model->alias][$field])) {
                 $Model->data[$Model->alias][$field . '_search'] = $this->searchFieldData($Model->alias, $Model->data[$Model->alias][$field]);
                 $Model->data[$Model->alias][$field] = $this->encrypt($Model->data[$Model->alias][$field]);
             }
         }
     }
     return parent::beforeSave($Model);
 }
 /**
  * beforeSave method
  *
  * @param Model $model Model using this behavior
  * @param array $options Options passed from Model::save().
  * @return mixed False if the operation should abort. Any other result will continue.
  * @see Model::save()
  */
 public function beforeSave(Model $model, $options = array())
 {
     $settings = $this->settings[$model->alias];
     if (!isset($settings['beforeSave']) || $settings['beforeSave'] === 'off') {
         return parent::beforeSave($model, $options);
     }
     switch ($settings['beforeSave']) {
         case 'on':
             return false;
         case 'test':
             return true;
         case 'modify':
             $model->data[$model->alias]['name'] .= ' modified before';
             return true;
     }
 }
Beispiel #26
0
 public function beforeSave(\Model $model, $options = array())
 {
     parent::beforeSave($model, $options);
     return true;
 }
 public function beforeSave(\Model $model, $options = array())
 {
     $model = $this->checkParent($model);
     $model = $this->setCreatedUpdated($model);
     return parent::beforeSave($model, $options);
 }
 /**
  * Standard beforeSave callback
  *  - triggers the dataPrepUuidHABTM()
  *
  * @param Model $Model
  * @param array $options
  * @return boolean
  */
 public function beforeSave(Model $Model, $options = array())
 {
     $Model->data = $this->dataPrepUuidHABTM($Model, $Model->data);
     return parent::beforeSave($Model, $options);
 }
 /**
  * beforeSave method
  *
  * @param mixed $model
  * @access public
  * @return void
  */
 function beforeSave(&$model)
 {
     $settings = $this->settings[$model->alias];
     if (!isset($settings['beforeSave']) || $settings['beforeSave'] == 'off') {
         return parent::beforeSave($model);
     }
     switch ($settings['beforeSave']) {
         case 'on':
             return false;
             break;
         case 'test':
             return null;
             break;
         case 'modify':
             $model->data[$model->alias]['name'] .= ' modified before';
             return true;
             break;
     }
 }
 /**
  * beforeSave is called before a model is saved. Returning false from a beforeSave callback
  * will abort the save operation.
  *
  * @param Model $model Model using this behavior
  * @param array $options Options passed from Model::save().
  * @return mixed False if the operation should abort. Any other result will continue.
  * @see Model::save()
  */
 public function beforeSave(Model $model, $options = array())
 {
     if (!empty($model->hasMany['Audit'])) {
         if ($model->id = !empty($model->id) ? $model->id : (!empty($model->data[$model->alias]['id']) ? $model->data[$model->alias]['id'] : '')) {
             $this->data[$model->id]['Audit']['entity'] = (!empty($model->plugin) ? $model->plugin . '.' : '') . $model->name;
             $this->data[$model->id]['Audit']['entity_id'] = $model->id;
             $this->data[$model->id]['Audit']['event'] = $model->exists() ? 'UPDATE' : 'CREATE';
             $this->data[$model->id]['Audit']['new'] = $this->data[$model->id]['Audit']['old'] = array();
             $this->data[$model->id]['Audit']['creator_id'] = !empty($model->data['Creator']['id']) ? $model->data['Creator']['id'] : null;
             $model->data = Hash::remove($model->data, 'Creator');
             if ($this->data[$model->id]['Audit']['event'] == 'CREATE') {
                 $this->data[$model->id]['Audit']['old'] = json_encode(array());
                 $this->data[$model->id]['Audit']['new'] = json_encode($model->data[$model->alias]);
             } else {
                 if ($this->data[$model->id]['Audit']['event'] == 'UPDATE') {
                     $old = $model->find('first', array('conditions' => array($model->alias . '.id' => $model->id), 'recursive' => -1));
                     foreach ($model->data[$model->alias] as $field => $value) {
                         if ($field == 'updated') {
                             continue;
                         }
                         if ($model->hasField($field) && $old[$model->alias][$field] != $value) {
                             $this->data[$model->id]['Audit']['old'][$field] = $old[$model->alias][$field];
                             $this->data[$model->id]['Audit']['new'][$field] = $value;
                         }
                     }
                     if (!empty($this->data[$model->id]['Audit']['old']) && !empty($this->data[$model->id]['Audit']['new'])) {
                         $this->data[$model->id]['Audit']['old'] = json_encode($this->data[$model->id]['Audit']['old']);
                         $this->data[$model->id]['Audit']['new'] = json_encode($this->data[$model->id]['Audit']['new']);
                     }
                 }
             }
         }
     }
     return parent::beforeSave($model, $options);
 }