Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 28 |
|
0.00% |
0 / 3 |
CRAP | |
0.00% |
0 / 1 |
passwords_convert_p1 | |
0.00% |
0 / 28 |
|
0.00% |
0 / 3 |
72 | |
0.00% |
0 / 1 |
depends_on | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
update_data | |
0.00% |
0 / 3 |
|
0.00% |
0 / 1 |
2 | |||
update_passwords | |
0.00% |
0 / 24 |
|
0.00% |
0 / 1 |
42 |
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\v310; |
15 | |
16 | class passwords_convert_p1 extends \phpbb\db\migration\migration |
17 | { |
18 | public static function depends_on() |
19 | { |
20 | return array('\phpbb\db\migration\data\v310\passwords_p2'); |
21 | } |
22 | |
23 | public function update_data() |
24 | { |
25 | return array( |
26 | array('custom', array(array($this, 'update_passwords'))), |
27 | ); |
28 | } |
29 | |
30 | /** |
31 | * Update passwords with convert flag to have $CP$ prefix |
32 | * |
33 | * @param int $start Limit start value |
34 | * @return int|void Null if conversion is finished, next start value if not |
35 | */ |
36 | public function update_passwords($start) |
37 | { |
38 | // Nothing to do if user_pass_convert column doesn't exist |
39 | if (!$this->db_tools->sql_column_exists($this->table_prefix . 'users', 'user_pass_convert')) |
40 | { |
41 | return; |
42 | } |
43 | |
44 | $start = (int) $start; |
45 | $limit = 1000; |
46 | $converted_users = 0; |
47 | |
48 | $sql = 'SELECT user_password, user_id |
49 | FROM ' . $this->table_prefix . 'users |
50 | WHERE user_pass_convert = 1 |
51 | ORDER BY user_id'; |
52 | $result = $this->db->sql_query_limit($sql, $limit, $start); |
53 | |
54 | $update_users = array(); |
55 | while ($row = $this->db->sql_fetchrow($result)) |
56 | { |
57 | $converted_users++; |
58 | |
59 | $user_id = (int) $row['user_id']; |
60 | // Prefix all passwords that need to be converted |
61 | if (!isset($update_users[$user_id])) |
62 | { |
63 | // Use $CP$ prefix for passwords that need to |
64 | // be converted and set pass convert to false. |
65 | $update_users[$user_id] = '$CP$' . $row['user_password']; |
66 | } |
67 | } |
68 | $this->db->sql_freeresult($result); |
69 | |
70 | foreach ($update_users as $user_id => $user_password) |
71 | { |
72 | $sql = 'UPDATE ' . $this->table_prefix . "users |
73 | SET user_password = '" . $this->db->sql_escape($user_password) . "' |
74 | WHERE user_id = $user_id"; |
75 | $this->sql_query($sql); |
76 | } |
77 | |
78 | if ($converted_users < $limit) |
79 | { |
80 | // There are no more users to be converted |
81 | return; |
82 | } |
83 | |
84 | // There are still more users to query, return the next start value |
85 | return $start + $limit; |
86 | } |
87 | } |