diff options
| -rw-r--r-- | phpBB/phpbb/avatar/manager.php | 40 | ||||
| -rw-r--r-- | tests/avatar/fixtures/users.xml | 28 | ||||
| -rw-r--r-- | tests/avatar/manager_test.php | 56 | 
3 files changed, 105 insertions, 19 deletions
| diff --git a/phpBB/phpbb/avatar/manager.php b/phpBB/phpbb/avatar/manager.php index 42ae61a9a2..8d83152ed6 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; +		$result = $this->prefix_avatar_columns($prefix, self::$default_row); -		foreach ($result as $key => $value) +		$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[$prefix . $key] = $value; -			unset($result[$key]); +			$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);  		} +	} -		$sql = 'UPDATE ' . $table . ' -				SET ' . $db->sql_build_array('UPDATE', $result) . ' -				WHERE ' . $prefix . 'id = ' . (int) $avatar_data['id']; -		$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;  	}  } 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 @@              <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> 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); +	}  } | 
