/**
  * 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;
 }
Example #3
0
 /**
  * workaround for RecyclableBehavior to delete related records
  */
 public function deleteLinks($id)
 {
     return parent::_deleteLinks($id);
 }