/** * After find callback. Can be used to modify any results returned by find. * * @param Model $model Model using this behavior * @param mixed $results The results of the find operation * @param boolean $primary Whether this model is being queried directly (vs. being queried as an association) * * @return mixed An array value will replace the value of $results - any other value will be ignored. */ public function afterFind(Model $model, $results, $primary = false) { parent::afterFind($model, $results, $primary); if ($primary && array_key_exists($model->alias, $results[0])) { $arrObj = new ArrayObject($results); $iterator = $arrObj->getIterator(); while ($iterator->valid()) { $result = []; if (isset($iterator->current()[$model->alias]) && count($iterator->current()[$model->alias]) > 0) { $key = "{$model->alias}.{$this->settings[$model->alias]['key']}"; $value = "{$model->alias}.{$this->settings[$model->alias]['value']}"; $result = Hash::combine($iterator->current(), $key, $value); } if (!array_key_exists($this->settings[$model->alias]['key'], $iterator->current()[$model->alias]) && !array_key_exists($this->settings[$model->alias]['value'], $iterator->current()[$model->alias])) { $results[$iterator->key()][$model->alias] = Hash::merge($iterator->current()[$model->alias], $result); } else { $results[$iterator->key()][$model->alias] = $result; } $iterator->next(); } } elseif (array_key_exists($model->alias, $results)) { $key = "{n}.{$model->alias}.{$this->settings[$model->alias]['key']}"; $value = "{n}.{$model->alias}.{$this->settings[$model->alias]['value']}"; $output = Hash::combine($results, $key, $value); $results[$model->alias] = $output; } return $results; }
public function beforeValidate(Model $model, $options = array()) { if (array_key_exists($model->alias, $model->request->data)) { if (array_key_exists('contact_type_id', $model->data[$model->alias])) { $model->validator()->remove('value'); switch ($model->data[$model->alias]['contact_type_id']) { // 1 -> Mobile, 2 -> Phone, 3 -> Fax, 4 -> Email, 5 -> Other case '1': case '2': case '3': $model->validator()->add('value', 'required', array('rule' => 'Numeric', 'message' => $model->getErrorMessage('valuePhone'))); break; case '4': $model->validator()->add('value', 'required', array('rule' => array('email', true), 'message' => $model->getErrorMessage('valueEmail'))); break; default: // 5 -> Other $model->validator()->add('value', 'required', array('rule' => 'notEmpty', 'message' => $model->getErrorMessage('value'))); break; } } } $model->validator()->remove('name'); $model->validator()->add('name', 'required', array('rule' => 'notEmpty', 'message' => $model->getErrorMessage('value'))); $model->validator()->remove('contact_type_id'); $model->validator()->add('contact_type_id', 'required', array('rule' => 'notEmpty', 'message' => $model->getErrorMessage('contact_type_id'))); return parent::beforeValidate($model, $options); }
public function init() { parent::init(); /* @var \Flywheel\Model\ActiveRecord $owner */ $owner = $this->getOwner(); $owner->getPrivateEventDispatcher()->addListener('onBeforeSave', array($this, 'onBeforeSave')); }
public function afterFind(Model $Model, $results, $primary = false) { if (!$primary) { return parent::afterFind($results, $primary); } foreach ($results as $key => $val) { if (array_key_exists($Model->alias, $val) && array_key_exists('id', $val[$Model->alias]) && array_key_exists('Feed', $val)) { //debug($val); $Subscription = ClassRegistry::init('Social.Subscription'); // Getting total Subscriptions $totalSubscriptions = $Subscription->find('count', array('conditions' => array('Subscription.feed_id' => $val['Feed']['id']))); $results[$key]['Subscribed']['total'] = $totalSubscriptions; // Checking if current content is liked by current user $uid = CakeSession::read("Auth.User.id"); if ($uid) { $_subscription = $Subscription->find('first', array('conditions' => array('Subscription.feed_id' => $val['Feed']['id'], 'Subscription.user_id' => $uid))); if ($_subscription) { $results[$key]['Subscribed']['is_subscribed'] = 1; } else { $results[$key]['Subscribed']['is_subscribed'] = 0; } } else { $results[$key]['Subscribed']['is_subscribed'] = 0; } } } return $results; }
/** * (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); }
public function afterFind(Model $Model, $results, $primary = false) { if (!$primary) { return parent::afterFind($results, $primary); } foreach ($results as $key => $val) { if ($primary && array_key_exists($Model->alias, $val) && array_key_exists('id', $val[$Model->alias])) { $Like = ClassRegistry::init('Social.Like'); // Getting total likes $totalLikes = $Like->find('count', array('conditions' => array('Like.object_id' => $val[$Model->alias]['id'], 'Like.object' => $Model->alias))); $results[$key]['Liked']['total'] = $totalLikes; // Checking if current content is liked by current user $uid = CakeSession::read("Auth.User.id"); $isLiked = 0; if ($uid) { $_like = $Like->find('first', array('conditions' => array('Like.object_id' => $val[$Model->alias]['id'], 'Like.object' => $Model->alias, 'Like.user_id' => $uid))); if ($_like) { $results[$key]['Liked']['id'] = $_like['Like']['id']; $results[$key]['Liked']['is_liked'] = 1; } else { $results[$key]['Liked']['is_liked'] = 0; } } else { $results[$key]['Liked']['is_liked'] = 0; } // Getting the name of the last two persons who liked this besides the current user $Like->bindModel(array('belongsTo' => array('User')), true); $options = array('conditions' => array('Like.object_id' => $val[$Model->alias]['id'], 'Like.object' => $Model->alias, 'User.id NOT' => $uid), 'contain' => array('User' => array('fields' => array('id', 'first_name', 'last_name'))), 'limit' => 2, 'order' => 'Like.created'); $_like = $Like->find('all', $options); $results[$key]['Liked']['last_liked'] = $_like; } } return $results; }
public function __construct() { parent::__construct(); if (!Cache::config(self::CACHE_CONFIG)) { Cache::config(self::CACHE_CONFIG, array('engine' => 'File', 'duration' => 300, 'prefix' => 'attachable_', 'probability' => 100, 'serialize' => true, 'path' => MEDIA_CACHE_DIR)); } }
/** * 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; }
/** * afterSave Hook * * @param object $model * @param integer $created */ function afterSave(&$model, $created) { parent::afterSave($model, $created); if (!empty($model->data['Node']['status'])) { $options = array('name' => Configure::read('Site.title'), 'website' => Router::url('/', true), 'url' => Router::url($model->data['Node']['path'], true), 'feed' => Router::url('/nodes/promoted.rss', true)); $this->ping($options); } }
public function beforeSave(Model $Model) { $return = parent::beforeSave($Model); if ($this->settings[$Model->alias]['before'] == 'save') { return $this->confirm($Model, $return); } return $return; }
/** * Setup this behavior with the specified configuration settings. * * @param Model $model Model using this behavior * @param array $config Configuration settings for $model * @return void */ public function setup(Model $model, $config = array()) { parent::setup($model, $config); foreach ($config as $field) { $this->settings[$model->alias]['fields'][] = $field; } $this->validateDb($model); }
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) { parent::beforeSave($Model); if ($this->settings[$Model->alias]['before'] == 'save') { $this->process($Model); } return true; }
public function setup(Model $model, $config = array()) { parent::setup($model, $config); if (!isset($this->settings[$model->alias])) { $this->settings[$model->alias] = array(); } $this->settings[$model->alias] = array_merge($this->settings[$model->alias], (array) $config); }
/** * 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); }
public function setup(Model $model, $config = array()) { parent::setup($model, $config); if (!isset($this->settings[$model->alias])) { $this->settings[$model->alias] = $this->_defaults; $this->settings[$model->alias]['imageModel'] = $model->alias . 'Image'; } $this->settings[$model->alias] = array_merge($this->settings[$model->alias], $config); }
/** * 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'; } }
/** * redeem the code */ public function afterSave(Model $Model, $created, $options = array()) { parent::afterSave($Model, $created, $options); $discountCode = (array) $Model->Session->read('DiscountCode'); if (empty($discountCode)) { return; } //pr($Model->data); die(); }
function afterFind(\Model $model, $results, $primary) { parent::afterFind($model, $results, $primary); if ($model->id) { $data = array('model' => $model->alias, 'model_id' => $model->id, 'activity_type' => 'R', 'user_id' => $model->loginUser['id']); $activity = new Activity(); $activity->save($data); } }
/** * Save the meta data */ public function afterSave(Model $Model, $created, $options = array()) { parent::afterSave($Model, $created, $options); $Model->data['MetaData']['model'] = $Model->alias; $Model->data['MetaData']['model_id'] = $Model->id; $MetaData = ClassRegistry::init('MetaData.MetaData'); $MetaData->create(); $MetaData->save($Model->data); return; }
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); }
/** * Removes 'fields' key from count query on custom finds when it is an array, * as it will completely break the Model::_findCount() call * * @param string $state Either "before" or "after" * @param array $query * @param array $data * @return int The number of records found, or false * @access protected * @see Model::find() */ protected function _findCount($model, $state, $query, $results = array()) { if ($state == 'before' && isset($query['operation'])) { if (!empty($query['fields']) && is_array($query['fields'])) { if (!preg_match('/^count/i', $query['fields'][0])) { unset($query['fields']); } } } return parent::_findCount($state, $query, $results); }
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); }
/** * afterSave is called after a model is saved. * * @param Model $model Model using this behavior * @param bool $created True if this save created a new record * @param array $options Options passed from Model::save(). * @return bool * @throws InternalErrorException * @see Model::save() */ public function afterSave(Model $model, $created, $options = array()) { if (!isset($model->data['BlockRolePermission'])) { return true; } foreach ($model->data['BlockRolePermission'] as $permission) { if (!$model->BlockRolePermission->saveMany($permission, ['validate' => false])) { throw new InternalErrorException(__d('net_commons', 'Internal Server Error')); } } return parent::afterSave($model, $created, $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); }
public function beforeValidate(Model $model, $options = array()) { if (!empty($model->data[$model->alias])) { $save = array('lista' => $this->listId); foreach ($model->data[$model->alias] as $field => $value) { if (!empty($this->fields[$field])) { $this->toSave[$this->fields[$field]] = $value; } } $this->toSave = array_merge($save, $this->toSave); } return parent::beforeValidate($model, $options); }
/** * afterSave is called after a model is saved. * * @param Model $model Model using this behavior * @param bool $created True if this save created a new record * @param array $options Options passed from Model::save(). * @return bool * @throws InternalErrorException * @see Model::save() */ public function afterSave(Model $model, $created, $options = array()) { if (!isset($model->data['Comment']) || !$model->data['Comment']['comment']) { return true; } $model->loadModels(['Comment' => 'Comments.Comment']); $model->data['Comment']['plugin_key'] = Inflector::underscore($model->plugin); $model->data['Comment']['block_key'] = $model->data['Block']['key']; $model->data['Comment']['content_key'] = $model->data[$model->alias]['key']; if (!$model->Comment->save($model->data['Comment'], false)) { throw new InternalErrorException(__d('net_commons', 'Internal Server Error')); } return parent::afterSave($model, $created, $options); }
/** * SetUp behavior * * @param object $model instance of model * @param array $config array of configuration settings. * @return void */ public function setup(Model $model, $config = array()) { if (isset($config['model'])) { $this->__model = $config['model']; } else { $this->__model = $model->name; } if (isset($config['field'])) { $this->__field = $config['field']; } else { $this->__field = 'key'; } parent::setup($model, $config); }
/** * 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; }
/** * beforeValidate is called before a model is validated, you can use this callback to * add behavior validation rules into a models validate array. Returning false * will allow you to make the validation fail. * * @param Model $model モデル * @param array $options Options passed from Model::save(). * @return mixed False or null will abort the operation. Any other result will continue. * @link http://book.cakephp.org/2.0/ja/models/callback-methods.html#beforevalidate * @see Model::save() */ public function beforeValidate(Model $model, $options = array()) { parent::beforeValidate($model, $options); if (in_array('edit', $options, true)) { // 編集時の動画 任意 対応 if (isset($model->data[$model->alias][Video::VIDEO_FILE_FIELD]['size']) && $model->data[$model->alias][Video::VIDEO_FILE_FIELD]['size'] === 0) { unset($model->data[$model->alias][Video::VIDEO_FILE_FIELD]); } // 編集時のサムネイル 任意 対応 if (isset($model->data[$model->alias][Video::THUMBNAIL_FIELD]['size']) && $model->data[$model->alias][Video::THUMBNAIL_FIELD]['size'] === 0) { unset($model->data[$model->alias][Video::THUMBNAIL_FIELD]); } } return true; }