00001 <?php
00002 require_once dirname(__FILE__) . '/commandbase.cls.php';
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 class CommandTransactional extends CommandBase {
00014
00015
00016
00017
00018
00019 public function execute() {
00020 $ret = new Status();
00021 DB::start_trans();
00022 try {
00023 $ret = $this->do_execute();
00024 }
00025 catch (Exception $ex) {
00026 $ret->merge($ex);
00027 }
00028 if ($ret->is_ok()) {
00029 $ret->merge(parent::execute());
00030 }
00031 if ($ret->is_error()) {
00032 $this->undo();
00033 }
00034 DB::end_trans($ret);
00035 return $ret;
00036 }
00037
00038
00039
00040
00041
00042
00043 protected function do_execute() {
00044 return new Status();
00045 }
00046 }