1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-05-05 15:16:16 +02:00

Merge pull request #3064 from marc1706/ticket/13197

[ticket/13197] Also delete group avatar from users that have it set
This commit is contained in:
Joas Schilling 2014-11-21 22:41:17 +01:00
commit dd7e09d092
3 changed files with 106 additions and 20 deletions

View File

@ -326,17 +326,41 @@ class manager
$driver->delete($avatar_data);
}
$result = self::$default_row;
foreach ($result as $key => $value)
{
$result[$prefix . $key] = $value;
unset($result[$key]);
}
$result = $this->prefix_avatar_columns($prefix, self::$default_row);
$sql = 'UPDATE ' . $table . '
SET ' . $db->sql_build_array('UPDATE', $result) . '
WHERE ' . $prefix . 'id = ' . (int) $avatar_data['id'];
$db->sql_query($sql);
// Make sure we also delete this avatar from the users
if ($prefix === 'group_')
{
$result = $this->prefix_avatar_columns('user_', self::$default_row);
$sql = 'UPDATE ' . USERS_TABLE . '
SET ' . $db->sql_build_array('UPDATE', $result) . "
WHERE user_avatar = '" . $db->sql_escape($avatar_data['avatar']) . "'";
$db->sql_query($sql);
}
}
/**
* Prefix avatar columns
*
* @param string $prefix Column prefix
* @param array $data Column data
*
* @return array Column data with prefixed column names
*/
public function prefix_avatar_columns($prefix, $data)
{
foreach ($data as $key => $value)
{
$data[$prefix . $key] = $value;
unset($data[$key]);
}
return $data;
}
}

View File

@ -29,5 +29,33 @@
<value></value>
<value></value>
</row>
<row>
<value>3</value>
<value>foo</value>
<value></value>
<value></value>
<value>g5_1414350991.jpg</value>
<value>avatar.driver.upload</value>
<value>80</value>
<value>80</value>
</row>
</table>
<table name="phpbb_groups">
<column>group_id</column>
<column>group_type</column>
<column>group_name</column>
<column>group_avatar</column>
<column>group_avatar_type</column>
<column>group_avatar_width</column>
<column>group_avatar_height</column>
<row>
<value>5</value>
<value>3</value>
<value>ADMINISTRATORS</value>
<value>g5_1414350991.jpg</value>
<value>avatar.driver.upload</value>
<value>80</value>
<value>80</value>
</row>
</table>
</dataset>

View File

@ -299,7 +299,8 @@ class phpbb_avatar_manager_test extends \phpbb_database_test_case
public function data_handle_avatar_delete()
{
return array(
array(array(
array(
array(
'avatar' => '',
'avatar_type' => '',
'avatar_width' => 0,
@ -309,7 +310,21 @@ class phpbb_avatar_manager_test extends \phpbb_database_test_case
'avatar_type' => 'avatar.driver.gravatar',
'avatar_width' => '16',
'avatar_height' => '16',
), USERS_TABLE, 'user_'),
), USERS_TABLE, 'user_',
),
array(
array(
'avatar' => '',
'avatar_type' => '',
'avatar_width' => 0,
'avatar_height' => 0,
), 5, array(
'avatar' => 'g5_1414350991.jpg',
'avatar_type' => 'avatar.driver.upload',
'avatar_width' => '80',
'avatar_height' => '80'
), GROUPS_TABLE, 'group_',
),
);
}
@ -333,4 +348,23 @@ class phpbb_avatar_manager_test extends \phpbb_database_test_case
$this->assertEquals($value, $row[$key]);
}
}
/**
* @dependsOn test_handle_avatar_delete
*/
public function test_user_group_avatar_deleted()
{
$sql = 'SELECT * FROM ' . USERS_TABLE . '
WHERE user_id = 3';
$result = $this->db->sql_query_limit($sql, 1);
$row = $this->manager->clean_row($this->db->sql_fetchrow($result), 'user');
$this->db->sql_freeresult($result);
$this->assertEquals(array(
'avatar' => '',
'avatar_type' => '',
'avatar_width' => 0,
'avatar_height' => 0,
), $row);
}
}