preDelete() public méthode

Empty template method to provide concrete Record classes with the possibility to hook into the deletion procedure.
public preDelete ( $event )
 /**
  * deletes this data access object and all the related composites
  * this operation is isolated by a transaction
  *
  * this event can be listened by the onPreDelete and onDelete listeners
  *
  * @return boolean      true on success, false on failure
  */
 public function delete(Doctrine_Record $record)
 {
     if (!$record->exists()) {
         return false;
     }
     $this->conn->beginTransaction();
     $event = new Doctrine_Event($this, Doctrine_Event::RECORD_DELETE);
     $record->preDelete($event);
     $record->state(Doctrine_Record::STATE_LOCKED);
     $this->deleteComposites($record);
     $record->state(Doctrine_Record::STATE_TDIRTY);
     if (!$event->skipOperation) {
         $this->conn->transaction->addDelete($record);
         $record->state(Doctrine_Record::STATE_TCLEAN);
     }
     $record->postDelete($event);
     $this->conn->commit();
     return true;
 }
Exemple #2
0
 /**
  * Invokes preDelete event listeners.
  *
  * @return boolean  Whether a listener has used it's veto (don't delete!).
  */
 private function _preDelete(Doctrine_Record $record)
 {
     $event = new Doctrine_Event($record, Doctrine_Event::RECORD_DELETE);
     $record->preDelete($event);
     $record->getTable()->getRecordListener()->preDelete($event);
     return $event->skipOperation;
 }
Exemple #3
0
 /**
  * deletes given record and all the related composites
  * this operation is isolated by a transaction
  *
  * this event can be listened by the onPreDelete and onDelete listeners
  *
  * @return boolean      true on success, false on failure
  */
 public function delete(Doctrine_Record $record)
 {
     if (!$record->exists()) {
         return false;
     }
     $this->conn->beginTransaction();
     $event = new Doctrine_Event($record, Doctrine_Event::RECORD_DELETE);
     $record->preDelete($event);
     $table = $record->getTable();
     $table->getRecordListener()->preDelete($event);
     $state = $record->state();
     $record->state(Doctrine_Record::STATE_LOCKED);
     $this->deleteComposites($record);
     if (!$event->skipOperation) {
         $record->state(Doctrine_Record::STATE_TDIRTY);
         if ($table->getOption('joinedParents')) {
             foreach ($table->getOption('joinedParents') as $parent) {
                 $parentTable = $table->getConnection()->getTable($parent);
                 $this->conn->delete($parentTable, $record->identifier());
             }
         }
         $this->conn->delete($table, $record->identifier());
         $record->state(Doctrine_Record::STATE_TCLEAN);
     } else {
         // return to original state
         $record->state($state);
     }
     $table->getRecordListener()->postDelete($event);
     $record->postDelete($event);
     $table->removeRecord($record);
     $this->conn->commit();
     return true;
 }