|
Moodle
2.2.1
http://www.collinsharper.com
|
00001 <?php 00002 00003 // This file is part of Moodle - http://moodle.org/ 00004 // 00005 // Moodle is free software: you can redistribute it and/or modify 00006 // it under the terms of the GNU General Public License as published by 00007 // the Free Software Foundation, either version 3 of the License, or 00008 // (at your option) any later version. 00009 // 00010 // Moodle is distributed in the hope that it will be useful, 00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 // GNU General Public License for more details. 00014 // 00015 // You should have received a copy of the GNU General Public License 00016 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 00017 00018 00028 defined('MOODLE_INTERNAL') || die(); 00029 00033 class moodle_transaction { 00034 private $start_backtrace; 00035 private $database = null; 00036 00043 public function __construct($database) { 00044 $this->database = $database; 00045 $this->start_backtrace = debug_backtrace(); 00046 array_shift($this->start_backtrace); 00047 } 00048 00053 public function get_backtrace() { 00054 return $this->start_backtrace; 00055 } 00056 00061 public function is_disposed() { 00062 return empty($this->database); 00063 } 00064 00071 public function dispose() { 00072 return $this->database = null; 00073 } 00074 00085 public function allow_commit() { 00086 if ($this->is_disposed()) { 00087 throw new dml_transaction_exception('Transactions already disposed', $this); 00088 } 00089 $this->database->commit_delegated_transaction($this); 00090 } 00091 00098 public function rollback(Exception $e) { 00099 if ($this->is_disposed()) { 00100 throw new dml_transaction_exception('Transactions already disposed', $this); 00101 } 00102 $this->database->rollback_delegated_transaction($this, $e); 00103 } 00104 }