r4393 processGridForm(): employ transaction to make sure, that the changes either
authorDenis Ovsienko <infrastation@yandex.ru>
Fri, 25 Mar 2011 10:43:38 +0000 (10:43 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Fri, 25 Mar 2011 10:43:38 +0000 (10:43 +0000)
  happen all at once, or don't happen at all (to avoid leaving inconsistent
  data in the table like that in bugs #399/415)

wwwroot/inc/database.php

index ef1bec3..81298c8 100644 (file)
@@ -896,10 +896,11 @@ function commitUpdateRack ($rack_id, $new_name, $new_height, $new_row_id, $new_c
 // The function returns the modified rack upon success.
 function processGridForm (&$rackData, $unchecked_state, $checked_state, $object_id = 0)
 {
 // The function returns the modified rack upon success.
 function processGridForm (&$rackData, $unchecked_state, $checked_state, $object_id = 0)
 {
-       global $loclist;
+       global $loclist, $dbxlink;
        $rack_id = $rackData['id'];
        $rack_name = $rackData['name'];
        $rackchanged = FALSE;
        $rack_id = $rackData['id'];
        $rack_name = $rackData['name'];
        $rackchanged = FALSE;
+       $dbxlink->beginTransaction();
        for ($unit_no = $rackData['height']; $unit_no > 0; $unit_no--)
        {
                for ($locidx = 0; $locidx < 3; $locidx++)
        for ($unit_no = $rackData['height']; $unit_no > 0; $unit_no--)
        {
                for ($locidx = 0; $locidx < 3; $locidx++)
@@ -952,10 +953,11 @@ function processGridForm (&$rackData, $unchecked_state, $checked_state, $object_
        if ($rackchanged)
        {
                usePreparedUpdateBlade ('Rack', array ('thumb_data' => NULL), array ('id' => $rack_id));
        if ($rackchanged)
        {
                usePreparedUpdateBlade ('Rack', array ('thumb_data' => NULL), array ('id' => $rack_id));
+               $dbxlink->commit();
                return array ('code' => 200, 'message' => "${rack_name}: All changes were successfully saved.");
        }
                return array ('code' => 200, 'message' => "${rack_name}: All changes were successfully saved.");
        }
-       else
-               return array ('code' => 300, 'message' => "${rack_name}: No changes.");
+       $dbxlink->rollBack();
+       return array ('code' => 300, 'message' => "${rack_name}: No changes.");
 }
 
 // This function builds a list of rack-unit-atom records, which are assigned to
 }
 
 // This function builds a list of rack-unit-atom records, which are assigned to