diff options
author | Marc Alexander <admin@m-a-styles.de> | 2017-04-15 18:18:32 +0200 |
---|---|---|
committer | Marc Alexander <admin@m-a-styles.de> | 2017-04-15 18:18:32 +0200 |
commit | 269150ed40d8cf42c2b8d755191b15229dc170c2 (patch) | |
tree | 7be8527b0d529748c53abf2f1fadf22c05626625 /phpBB/phpbb/template | |
parent | 24f9a4165463d9a546c9868cb352c0283d976c27 (diff) | |
parent | 136c74bd1c3d2ef1f22055d9bb14e6f524d41433 (diff) | |
download | forums-269150ed40d8cf42c2b8d755191b15229dc170c2.tar forums-269150ed40d8cf42c2b8d755191b15229dc170c2.tar.gz forums-269150ed40d8cf42c2b8d755191b15229dc170c2.tar.bz2 forums-269150ed40d8cf42c2b8d755191b15229dc170c2.tar.xz forums-269150ed40d8cf42c2b8d755191b15229dc170c2.zip |
Merge pull request #4612 from javiexin/ticket/14950
[ticket/14950] Add possibility to delete a template block
Diffstat (limited to 'phpBB/phpbb/template')
-rw-r--r-- | phpBB/phpbb/template/context.php | 42 | ||||
-rw-r--r-- | phpBB/phpbb/template/template.php | 3 |
2 files changed, 43 insertions, 2 deletions
diff --git a/phpBB/phpbb/template/context.php b/phpBB/phpbb/template/context.php index 5d04a09865..5e4f71a2a9 100644 --- a/phpBB/phpbb/template/context.php +++ b/phpBB/phpbb/template/context.php @@ -363,10 +363,11 @@ class context * If key is false the position is set to 0 * If key is true the position is set to the last entry * - * @param string $mode Mode to execute (valid modes are 'insert' and 'change') + * @param string $mode Mode to execute (valid modes are 'insert', 'change' and 'delete') * * If insert, the vararray is inserted at the given position (position counting from zero). * If change, the current block gets merged with the vararray (resulting in new key/value pairs be added and existing keys be replaced by the new \value). + * If delete, the vararray is ignored, and the block at the given position (counting from zero) is removed. * * Since counting begins by zero, inserting at the last position will result in this array: array(vararray, last positioned array) * and inserting at position 1 will result in this array: array(first positioned array, vararray, following vars) @@ -502,6 +503,45 @@ class context return true; } + // Delete Block + if ($mode == 'delete') + { + // If we are exceeding last iteration, do not delete anything + if ($key > sizeof($block) || $key < 0) + { + return false; + } + + // If we are positioned at the end, we remove the last element + if ($key == sizeof($block)) + { + $key--; + } + + // We are deleting the last element in the block, so remove the block + if (sizeof($block) === 1) + { + $block = null; // unset($block); does not work on references + return true; + } + + // Re-position template blocks + for ($i = $key; $i < sizeof($block)-1; $i++) + { + $block[$i] = $block[$i+1]; + $block[$i]['S_ROW_COUNT'] = $block[$i]['S_ROW_NUM'] = $i; + } + + // Remove the last element + unset($block[$i]); + + // Set first and last elements again, in case they were removed + $block[0]['S_FIRST_ROW'] = true; + $block[sizeof($block)-1]['S_LAST_ROW'] = true; + + return true; + } + return false; } diff --git a/phpBB/phpbb/template/template.php b/phpBB/phpbb/template/template.php index 9e3d658ca8..d1ec442e9a 100644 --- a/phpBB/phpbb/template/template.php +++ b/phpBB/phpbb/template/template.php @@ -160,10 +160,11 @@ interface template * If key is false the position is set to 0 * If key is true the position is set to the last entry * - * @param string $mode Mode to execute (valid modes are 'insert' and 'change') + * @param string $mode Mode to execute (valid modes are 'insert', 'change' and 'delete') * * If insert, the vararray is inserted at the given position (position counting from zero). * If change, the current block gets merged with the vararray (resulting in new \key/value pairs be added and existing keys be replaced by the new \value). + * If delete, the vararray is ignored, and the block at the given position (counting from zero) is removed. * * Since counting begins by zero, inserting at the last position will result in this array: array(vararray, last positioned array) * and inserting at position 1 will result in this array: array(first positioned array, vararray, following vars) |