From e9c99e7fadf5fed3e430e9ac1596a968724bbabe Mon Sep 17 00:00:00 2001 From: Jared Hancock <jared@osticket.com> Date: Fri, 6 Mar 2015 14:08:08 -0600 Subject: [PATCH] user: Import CSV in a single transaction (with auto rollback) --- include/class.user.php | 14 +++++++++++--- include/mysqli.php | 6 ++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/include/class.user.php b/include/class.user.php index 758b5ef01..97d6c52d3 100644 --- a/include/class.user.php +++ b/include/class.user.php @@ -457,14 +457,22 @@ class User extends UserModel { $users[] = $data; } + db_autocommit(false); + $error = false; foreach ($users as $u) { $vars = array_combine($keys, $u); - if (!static::fromVars($vars)) - return sprintf(__('Unable to import user: %s'), + if (!static::fromVars($vars)) { + $error = sprintf(__('Unable to import user: %s'), print_r($vars, true)); + break; + } } + if ($error) + db_rollback(); + + db_autocommit(true); - return count($users); + return $error ?: count($users); } function importFromPost($stuff, $extra=array()) { diff --git a/include/mysqli.php b/include/mysqli.php index ed70cd82e..1793f889e 100644 --- a/include/mysqli.php +++ b/include/mysqli.php @@ -90,6 +90,12 @@ function db_autocommit($enable=true) { return $__db->autocommit($enable); } +function db_rollback() { + global $__db; + + return $__db->rollback(); +} + function db_close() { global $__db; return @$__db->close(); -- GitLab