/** * Méthode qui gère l'action delete, supprime l'objet dans une transaction. * * @access protected * @return void */ protected function delete() { $this->onBeforeDelete(); Database::connection()->startTrans(); $mapper = Mapper::singleton($this->clsname); $emptyForDeleteProperties = call_user_func(array($this->clsname, 'getEmptyForDeleteProperties')); $notDeletedObjects = array(); // il y a des check auto on supprime un à un car les verif ne sont // pas faites par Mapper::delete() mais par Object::delete() $col = $mapper->loadCollection(array('Id' => $this->objID)); $count = $col->getCount(); for ($i = 0; $i < $count; $i++) { $o = $col->getItem($i); try { $o->delete(); } catch (Exception $exc) { $notDeletedObjects[] = $o->toString(); //. ': ' . $exc->getMessage(); } } if (Database::connection()->hasFailedTrans()) { $err = Database::connection()->errorMsg(); trigger_error($err, E_USER_WARNING); Database::connection()->rollbackTrans(); Template::errorDialog(E_ERROR_SQL . '.<br/>' . $err, $this->guessReturnURL()); exit; } Database::connection()->completeTrans(); if (!empty($notDeletedObjects)) { Template::infoDialog(sprintf(I_NOT_DELETED_WITH_LIST, implode('</li><li>', $notDeletedObjects)), $this->guessReturnURL()); exit; } $this->onAfterDelete(); }