![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/framework/DB/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Framework\DB; /** * DB transaction model * * @api * * @todo need collect connection by name */ class Transaction { /** * Objects which will be involved to transaction * * @var array */ protected $_objects = []; /** * Transaction objects array with alias key * * @var array */ protected $_objectsByAlias = []; /** * Callbacks array. * * @var array */ protected $_beforeCommitCallbacks = []; /** * Begin transaction for all involved object resources * * @return $this */ protected function _startTransaction() { foreach ($this->_objects as $object) { $object->getResource()->beginTransaction(); } return $this; } /** * Commit transaction for all resources * * @return $this */ protected function _commitTransaction() { foreach ($this->_objects as $object) { $object->getResource()->commit(); } return $this; } /** * Rollback transaction * * @return $this */ protected function _rollbackTransaction() { foreach ($this->_objects as $object) { $object->getResource()->rollBack(); } return $this; } /** * Run all configured object callbacks * * @return $this */ protected function _runCallbacks() { foreach ($this->_beforeCommitCallbacks as $callback) { call_user_func($callback); } return $this; } /** * Adding object for using in transaction * * @param \Magento\Framework\Model\AbstractModel $object * @param string $alias * @return $this */ public function addObject(\Magento\Framework\Model\AbstractModel $object, $alias = '') { $this->_objects[] = $object; if (!empty($alias)) { $this->_objectsByAlias[$alias] = $object; } return $this; } /** * Add callback function which will be called before commit transactions * * @param callable $callback * @return $this */ public function addCommitCallback($callback) { $this->_beforeCommitCallbacks[] = $callback; return $this; } /** * Initialize objects save transaction * * @return $this * @throws \Exception */ public function save() { $this->_startTransaction(); $error = false; try { foreach ($this->_objects as $object) { $object->save(); } } catch (\Exception $e) { $error = $e; } if ($error === false) { try { $this->_runCallbacks(); } catch (\Exception $e) { $error = $e; } } if ($error) { $this->_rollbackTransaction(); throw $error; } else { $this->_commitTransaction(); } return $this; } /** * Initialize objects delete transaction * * @return $this * @throws \Exception */ public function delete() { $this->_startTransaction(); $error = false; try { foreach ($this->_objects as $object) { $object->delete(); } } catch (\Exception $e) { $error = $e; } if ($error === false) { try { $this->_runCallbacks(); } catch (\Exception $e) { $error = $e; } } if ($error) { $this->_rollbackTransaction(); throw $error; } else { $this->_commitTransaction(); } return $this; } }