From 1da1a7065086d451f61cf470777dbd69bec3ee79 Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Sat, 25 Oct 2014 15:57:41 -0700 Subject: [ticket/13197] Also delete group avatar from users that have it set PHPBB3-13197 --- phpBB/phpbb/avatar/manager.php | 38 +++++++++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 7 deletions(-) diff --git a/phpBB/phpbb/avatar/manager.php b/phpBB/phpbb/avatar/manager.php index 42ae61a9a2..5d001c0f73 100644 --- a/phpBB/phpbb/avatar/manager.php +++ b/phpBB/phpbb/avatar/manager.php @@ -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; } } -- cgit v1.2.1 From b0942fe31db36e2c53533fb67d0e62dabecb53e6 Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Sun, 26 Oct 2014 12:42:47 -0700 Subject: [ticket/13197] Test that user's group avatar is deleted by group avatar delete PHPBB3-13197 --- tests/avatar/fixtures/users.xml | 28 +++++++++++++++++++++ tests/avatar/manager_test.php | 56 +++++++++++++++++++++++++++++++++-------- 2 files changed, 73 insertions(+), 11 deletions(-) diff --git a/tests/avatar/fixtures/users.xml b/tests/avatar/fixtures/users.xml index 3e6586e909..1773d438c2 100644 --- a/tests/avatar/fixtures/users.xml +++ b/tests/avatar/fixtures/users.xml @@ -29,5 +29,33 @@ + + 3 + foo + + + g5_1414350991.jpg + avatar.driver.upload + 80 + 80 + + + + group_id + group_type + group_name + group_avatar + group_avatar_type + group_avatar_width + group_avatar_height + + 5 + 3 + ADMINISTRATORS + g5_1414350991.jpg + avatar.driver.upload + 80 + 80 +
diff --git a/tests/avatar/manager_test.php b/tests/avatar/manager_test.php index 81c153aed4..a109a7b5de 100644 --- a/tests/avatar/manager_test.php +++ b/tests/avatar/manager_test.php @@ -299,17 +299,32 @@ class phpbb_avatar_manager_test extends \phpbb_database_test_case public function data_handle_avatar_delete() { return array( - array(array( - 'avatar' => '', - 'avatar_type' => '', - 'avatar_width' => 0, - 'avatar_height' => 0, - ), 1, array( - 'avatar' => 'foobar@example.com', - 'avatar_type' => 'avatar.driver.gravatar', - 'avatar_width' => '16', - 'avatar_height' => '16', - ), USERS_TABLE, 'user_'), + array( + array( + 'avatar' => '', + 'avatar_type' => '', + 'avatar_width' => 0, + 'avatar_height' => 0, + ), 1, array( + 'avatar' => 'foobar@example.com', + 'avatar_type' => 'avatar.driver.gravatar', + 'avatar_width' => '16', + 'avatar_height' => '16', + ), 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); + } } -- cgit v1.2.1 From 8dd32c2bb5d1f99e59051797570c7f59fb937565 Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Sun, 9 Nov 2014 13:07:38 +0100 Subject: [ticket/13197] Correctly format sql query PHPBB3-13197 --- phpBB/phpbb/avatar/manager.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/phpBB/phpbb/avatar/manager.php b/phpBB/phpbb/avatar/manager.php index 5d001c0f73..0ff762a944 100644 --- a/phpBB/phpbb/avatar/manager.php +++ b/phpBB/phpbb/avatar/manager.php @@ -339,8 +339,8 @@ class manager $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']) . '"'; + SET ' . $db->sql_build_array('UPDATE', $result) . " + WHERE user_avatar = '" . $db->sql_escape($avatar_data['avatar']) . "'"; $db->sql_query($sql); } } -- cgit v1.2.1 From f23634d58053efd811c87baafb1623624abb6c36 Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Sun, 9 Nov 2014 13:43:26 +0100 Subject: [ticket/13197] Fix tabbing PHPBB3-13197 --- phpBB/phpbb/avatar/manager.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/phpBB/phpbb/avatar/manager.php b/phpBB/phpbb/avatar/manager.php index 0ff762a944..8d83152ed6 100644 --- a/phpBB/phpbb/avatar/manager.php +++ b/phpBB/phpbb/avatar/manager.php @@ -329,8 +329,8 @@ class manager $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']; + 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 @@ -339,8 +339,8 @@ class manager $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']) . "'"; + SET ' . $db->sql_build_array('UPDATE', $result) . " + WHERE user_avatar = '" . $db->sql_escape($avatar_data['avatar']) . "'"; $db->sql_query($sql); } } -- cgit v1.2.1