/** * Create a new transaction ID. * * @param string $creator A transaction creator. * @param string $creator_email The transaction creator's email address. * * @return integer A transaction ID. * @throws Whups_Exception */ public function newTransaction($creator, $creator_email = null) { $insert = 'INSERT INTO whups_transactions ' . '(transaction_timestamp, transaction_user_id) VALUES(?, ?)'; $this->_db->beginDbTransaction(); try { if ((empty($creator) || $creator < 0) && !empty($creator_email)) { // Need to insert dummy value first so we can get the // transaction ID. $transactionId = $this->_db->insert($insert, array(time(), 'x')); $creator = '-' . $transactionId . '_transaction'; $this->_db->insert('INSERT INTO whups_guests (guest_id, guest_email) ' . 'VALUES (?, ?)', array((string) $creator, $creator_email)); $this->_db->update('UPDATE whups_transactions SET transaction_user_id = ? ' . 'WHERE transaction_id = ?', array($creator, $transactionId)); } else { $transactionId = $this->_db->insert($insert, array(time(), $creator)); } } catch (Horde_Db_Exception $e) { $this->_db->rollbackDbTransaction(); throw new Whups_Exception($e); } $this->_db->commitDbTransaction(); return $transactionId; }