Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 39 |
|
0.00% |
0 / 3 |
CRAP | |
0.00% |
0 / 1 |
merge_duplicate_bbcodes | |
0.00% |
0 / 39 |
|
0.00% |
0 / 3 |
72 | |
0.00% |
0 / 1 |
update_data | |
0.00% |
0 / 3 |
|
0.00% |
0 / 1 |
2 | |||
update_bbcodes_table | |
0.00% |
0 / 11 |
|
0.00% |
0 / 1 |
30 | |||
merge_bbcodes | |
0.00% |
0 / 25 |
|
0.00% |
0 / 1 |
6 |
1 | <?php |
2 | /** |
3 | * |
4 | * This file is part of the phpBB Forum Software package. |
5 | * |
6 | * @copyright (c) phpBB Limited <https://www.phpbb.com> |
7 | * @license GNU General Public License, version 2 (GPL-2.0) |
8 | * |
9 | * For full copyright and license information, please see |
10 | * the docs/CREDITS.txt file. |
11 | * |
12 | */ |
13 | |
14 | namespace phpbb\db\migration\data\v32x; |
15 | |
16 | class merge_duplicate_bbcodes extends \phpbb\db\migration\container_aware_migration |
17 | { |
18 | public function update_data() |
19 | { |
20 | return [ |
21 | ['custom', [[$this, 'update_bbcodes_table']]], |
22 | ]; |
23 | } |
24 | |
25 | public function update_bbcodes_table() |
26 | { |
27 | $sql = 'SELECT bbcode_id, bbcode_tag, bbcode_helpline, bbcode_match, bbcode_tpl FROM ' . BBCODES_TABLE; |
28 | $result = $this->sql_query($sql); |
29 | $bbcodes = []; |
30 | while ($row = $this->db->sql_fetchrow($result)) |
31 | { |
32 | $variant = (substr($row['bbcode_tag'], -1) === '=') ? 'with': 'without'; |
33 | $bbcode_name = strtolower(rtrim($row['bbcode_tag'], '=')); |
34 | $bbcodes[$bbcode_name][$variant] = $row; |
35 | } |
36 | $this->db->sql_freeresult($result); |
37 | |
38 | foreach ($bbcodes as $bbcode_name => $variants) |
39 | { |
40 | if (count($variants) === 2) |
41 | { |
42 | $this->merge_bbcodes($variants['without'], $variants['with']); |
43 | } |
44 | } |
45 | } |
46 | |
47 | protected function merge_bbcodes(array $without, array $with) |
48 | { |
49 | try |
50 | { |
51 | $merged = $this->container->get('text_formatter.s9e.bbcode_merger')->merge_bbcodes( |
52 | [ |
53 | 'usage' => $without['bbcode_match'], |
54 | 'template' => $without['bbcode_tpl'] |
55 | ], |
56 | [ |
57 | 'usage' => $with['bbcode_match'], |
58 | 'template' => $with['bbcode_tpl'] |
59 | ] |
60 | ); |
61 | } |
62 | catch (\Exception $e) |
63 | { |
64 | // Ignore the pair and move on. The BBCodes would have to be fixed manually |
65 | return; |
66 | } |
67 | |
68 | $bbcode_data = [ |
69 | 'bbcode_tag' => $without['bbcode_tag'], |
70 | 'bbcode_helpline' => $without['bbcode_helpline'] . ' | ' . $with['bbcode_helpline'], |
71 | 'bbcode_match' => $merged['usage'], |
72 | 'bbcode_tpl' => $merged['template'] |
73 | ]; |
74 | |
75 | $sql = 'UPDATE ' . BBCODES_TABLE . ' |
76 | SET ' . $this->db->sql_build_array('UPDATE', $bbcode_data) . ' |
77 | WHERE bbcode_id = ' . (int) $without['bbcode_id']; |
78 | $this->sql_query($sql); |
79 | |
80 | $sql = 'DELETE FROM ' . BBCODES_TABLE . ' |
81 | WHERE bbcode_id = ' . (int) $with['bbcode_id']; |
82 | $this->sql_query($sql); |
83 | } |
84 | } |