public function create($mode) { $pdo = PDOBuilder::getPdo(); $newTransaction = !$pdo->inTransaction(); if ($newTransaction) { $pdo->beginTransaction(); } // Insert mode $id = parent::create($mode); if ($id === false) { if ($newTransaction) { $pdo->rollback(); return false; } } // Insert rules $stmt = $pdo->prepare("INSERT INTO PAYMENTMODES_RETURNS " . "(PAYMENTMODE_ID, MIN, RETURNMODE_ID) " . "VALUES (:pmId, :min, :ret);"); $stmt->bindValue(":pmId", $id); foreach ($mode->rules as $rule) { $stmt->bindValue(":min", $rule->minVal); if ($rule->modeId == PaymentModeReturn::PARENT_ID) { $stmt->bindValue(":ret", $id); } else { $stmt->bindValue(":ret", $rule->modeId); } if ($stmt->execute() === false) { if ($newTransaction) { $pdo->rollback(); } return false; } } // Insert values $stmtVal = $pdo->prepare("INSERT INTO PAYMENTMODES_VALUES " . "(PAYMENTMODE_ID, VALUE, RESOURCE, DISPORDER) " . "VALUES (:pmId, :val, :res, :dispOrder);"); $stmtVal->bindValue(":pmId", $id); foreach ($mode->values as $value) { $stmtVal->bindValue(":val", $value->value); $stmtVal->bindValue(":res", $value->resource); $stmtVal->bindValue(":dispOrder", $value->dispOrder); if ($stmtVal->execute() === false) { if ($newTransaction) { $pdo->rollback(); } return false; } } if ($newTransaction) { $pdo->commit(); } return $id; }