mirror of
https://github.com/phpbb/phpbb.git
synced 2025-08-22 16:22:58 +02:00
[ticket/14742] Avoid loop while reverting data
This combines reverted updata_data and revert_data into a single array. PHPBB3-14742
This commit is contained in:
@@ -81,4 +81,36 @@ class helper
|
||||
|
||||
return $steps;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the update steps from an array of data changes
|
||||
*
|
||||
* 'If' statements and custom methods will be skipped, for all
|
||||
* other calls the reverse method of the tool class will be called
|
||||
*
|
||||
* @param array $steps Update changes from migration
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function reverse_update_data($steps)
|
||||
{
|
||||
$reversed_array = array();
|
||||
|
||||
foreach ($steps as $step)
|
||||
{
|
||||
$parts = explode('.', $step[0]);
|
||||
$parameters = $step[1];
|
||||
|
||||
$class = $parts[0];
|
||||
$method = isset($parts[1]) ? $parts[1] : false;
|
||||
|
||||
if ($class !== 'if' && $class !== 'custom')
|
||||
{
|
||||
array_unshift($parameters, $method);
|
||||
$reversed_array[] = array($class . '.reverse', $parameters);
|
||||
}
|
||||
}
|
||||
|
||||
return array_reverse($reversed_array);
|
||||
}
|
||||
}
|
||||
|
@@ -150,6 +150,11 @@ class config implements \phpbb\db\migration\tool\tool_interface
|
||||
$arguments[0],
|
||||
);
|
||||
break;
|
||||
|
||||
case 'reverse':
|
||||
// It's like double negative
|
||||
$call = array_shift($arguments);
|
||||
break;
|
||||
}
|
||||
|
||||
if ($call)
|
||||
|
@@ -115,6 +115,11 @@ class config_text implements \phpbb\db\migration\tool\tool_interface
|
||||
$arguments[] = '';
|
||||
}
|
||||
break;
|
||||
|
||||
case 'reverse':
|
||||
// It's like double negative
|
||||
$call = array_shift($arguments);
|
||||
break;
|
||||
}
|
||||
|
||||
if ($call)
|
||||
|
@@ -454,6 +454,11 @@ class module implements \phpbb\db\migration\tool\tool_interface
|
||||
case 'remove':
|
||||
$call = 'add';
|
||||
break;
|
||||
|
||||
case 'reverse':
|
||||
// It's like double negative
|
||||
$call = array_shift($arguments);
|
||||
break;
|
||||
}
|
||||
|
||||
if ($call)
|
||||
|
@@ -637,6 +637,11 @@ class permission implements \phpbb\db\migration\tool\tool_interface
|
||||
$arguments[0],
|
||||
);
|
||||
break;
|
||||
|
||||
case 'reverse':
|
||||
// It's like double negative
|
||||
$call = array_shift($arguments);
|
||||
break;
|
||||
}
|
||||
|
||||
if ($call)
|
||||
|
Reference in New Issue
Block a user