/** * Run before a model is deleted, used to do a soft delete when needed. * * @param object $model Model about to be deleted * @param boolean $cascade If true records that depend on this record will also be deleted * @return boolean Set to true to continue with delete, false otherwise * @access public */ function beforeDelete(Model $model, $cascade = true) { if ($this->__settings[$model->alias]['delete'] && $model->hasField($this->__settings[$model->alias]['field'])) { $attributes = $this->__settings[$model->alias]; $id = $model->id; $data = array($model->alias => array($attributes['field'] => 1)); if (isset($attributes['field_date']) && $model->hasField($attributes['field_date'])) { $data[$model->alias][$attributes['field_date']] = $model->getDatasource()->expression('NOW()'); } foreach (array_merge(array_keys($data[$model->alias]), array('field', 'field_date', 'find', 'delete')) as $field) { unset($attributes[$field]); } if (!empty($attributes)) { $data[$model->alias] = array_merge($data[$model->alias], $attributes); } $model->id = $id; $deleted = $model->save($data, false, array_keys($data[$model->alias])); if ($deleted && $cascade) { $model->_deleteDependent($id, $cascade); $model->_deleteLinks($id); } return false; } return true; }
public function softDelete(Model $model, $id = null, $cascade = true) { if (!$id) { return false; } $model->id = $id; $attributes = $this->__settings[$model->alias]; $data = array($model->alias => array($attributes['field'] => 1)); if (isset($attributes['field_date']) && $model->hasField($attributes['field_date'])) { $data[$model->alias][$attributes['field_date']] = date('Y-m-d H:i:s'); } foreach (array_merge(array_keys($data[$model->alias]), array('field', 'field_date', 'find', 'delete')) as $field) { unset($attributes[$field]); } if (!empty($attributes)) { $data[$model->alias] = array_merge($data[$model->alias], $attributes); } $model->id = $id; $deleted = $model->save($data, false, array_keys($data[$model->alias])); if (!$deleted) { return false; } if ($cascade) { $model->_deleteDependent($id, $cascade); $model->_deleteLinks($id); } return true; }
/** * workaround for RecyclableBehavior to delete related records */ public function deleteLinks($id) { return parent::_deleteLinks($id); }